Группа не работает - Laravel

Я не могу запустить этот простой запрос в Laravel 5.3

$top_performers = DB::table('pom_votes')
        ->groupBy('performer_id')
        ->get();

Это дает мне:

SQLSTATE[42000]: Syntax error or access violation: 1055 'assessment_system.pom_votes.id' isn't in GROUP BY (SQL: select * from `pom_votes` group by `performer_id`)

Однако, если я копирую необработанный запрос из ошибки и запускаю непосредственно в PhpMyAdmin, он отлично работает.

Я уже проверил это:

https://laravel.com/docs/5.3/queries#ordering-grouping-limit-and-offset

Любая помощь будет применена.

Спасибо,

Parth Vora

Ответ 1

Отредактируйте конфигурацию файла config/database.php приложений config/database.php

В массиве mysql установите strict => false чтобы отключить строгий режим MySQL

Ответ 2

Возможно, ваша проблема связана с тем, что вы используете сервер MySQL с версией 5.7. 5+. Из этой версии в отношении того, как GROUP BY работает, изменяется, поскольку они заставляют его вести себя, чтобы быть совместимым с SQL99 (где в предыдущих версиях это не было).

Попробуйте сделать полную группу или изменить конфигурацию вашего сервера MySQL.

Ссылка на официальный MySQL-документ, где объясняется полная GROUP BY

Ответ 3

Отредактируйте конфигурацию файла конфигурации базы данных приложений /database.php

В массиве mysql установите strict => false, чтобы отключить строгий mod MySQL

или же

sudo nano/etc/mysql/mysql.cnf

[mysqld] sql_mode = NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

Ответ 4

Если вы ошибочно строгий режим, вы не можете использовать другие строгие функции для исправления этой ошибки. Перейдите в Illuminate\Database\Connectors\MySqlConnector.php и измените функцию, как показано ниже:

protected function strictMode() {
return "set session
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY
_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'";
}

замените функцию на это.