Список SELECT отсутствует в предложении GROUP BY - PullRequest
0 голосов
/ 17 марта 2020

у меня есть две таблицы pointages и chantiers между ними, принадлежащие к взаимосвязи, я хочу отобразить название chantiers и сумму проданных для каждого chantier, которые я пробовал, но это дает мне ошибку

$dataP = DB::table('chantiers')
         ->leftJoin('pointages','pointages.chantier_id','chantiers.id')
          ->selectRaw('COALESCE(SUM(pointages.sold),0) as sold,chantiers.chantier')
          ->groupBy('pointages.chantier_id')
          ->get();

таблица коэффициентов

enter image description here

таблица chantiers

enter image description here

ошибка enter image description here

Ответы [ 3 ]

1 голос
/ 18 марта 2020

Ваша mysql версия 5.7+, поэтому проверьте эту ссылку

MySQL 5.7.5 и выше реализует обнаружение функциональной зависимости. Если включен режим ONLY_FULL_GROUP_BY SQL (который по умолчанию), MySQL отклоняет запросы, для которых список выбора

Решение 1:

Проверка конфигурации / базы данных . php, если ваша mysql конфигурация strict => true, вам необходимо отключить ONLY_FULL_GROUP_BY, добавить modes следующим образом:

        'mysql' => [
            'driver' => 'mysql',
            ...
            'strict' => true,
            'engine' => null,
            'modes' => [
                //'ONLY_FULL_GROUP_BY',
                'STRICT_TRANS_TABLES',
                'NO_ZERO_IN_DATE',
                'NO_ZERO_DATE',
                'ERROR_FOR_DIVISION_BY_ZERO',
                'NO_AUTO_CREATE_USER',
                'NO_ENGINE_SUBSTITUTION'
           ],
        ],

PS: set strict => false тоже может работать, но отключение делает ваше приложение незащищенным.

Решение 2:

Использование ANY_VALUE :

Эта функция полезна для запросов GROUP BY, когда режим ONLY_FULL_GROUP_BY SQL включен, если MySQL отклоняет запрос, который, как вы знаете, действителен по причинам, которые MySQL не может определить. Возвращаемое значение и тип функции совпадают с возвращаемым значением и типом ее аргумента, но результат функции не проверяется для режима ONLY_FULL_GROUP_BY SQL.

$dataP = DB::table('chantiers')
         ->leftJoin('pointages','pointages.chantier_id','chantiers.id')
          ->selectRaw('COALESCE(SUM(pointages.sold),0) AS sold, ANY_VALUE(chantiers.chantier) AS chantier, pointages.chantier_id')
          ->groupBy('pointages.chantier_id')
          ->get();

PS: ANY_VALUE не существует в MariaDB .

0 голосов
/ 18 марта 2020

запустить эту команду в базе данных sql

SET GLOBAL sql_mode='';
0 голосов
/ 17 марта 2020

Группировка возможна только в поле выбора

В соответствии с указанным выше запросом, вы не добавляете группу по полю в поле выбора, поэтому Laravel выдает ошибку.

Так что, пожалуйста, попробуйте выполнить следующие действия, которые будут работать для вас

$dataP = DB::table('chantiers')
         ->leftJoin('pointages','pointages.chantier_id','chantiers.id')
          ->selectRaw('COALESCE(SUM(pointages.sold),0) as sold,chantiers.chantier,pointages.chantier_id')
          ->groupBy('pointages.chantier_id')
          ->get();

Надеюсь, вы получите требуемый ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...