Странная ошибка в построителе запросов Laravel Eloquent - PullRequest
0 голосов
/ 09 марта 2019

Я знаю, что это известная проблема, есть и другие вопросы об этой проблеме, но ни один из них не был полезен.Необработанный запрос работает нормально, если я запускаю напрямую к базе данных, когда он запускает throw Laravel, он выдает ошибку.Что, черт возьми, происходит?

Запрос:

Order::selectRaw("COUNT(id) AS `data`, DATE_FORMAT(created_at, '%m-%Y') AS new_date, YEAR(created_at) AS `year`, MONTH(created_at) AS `month`")
        ->groupBy('year')->get();

Ошибка:

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'orders.created_at' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (SQL: select COUNT(id) AS `data`, DATE_FORMAT(created_at, '%m-%Y') AS new_date, YEAR(created_at) AS `year`, MONTH(created_at) AS `month` from `orders` group by `year`)

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Если при запуске этого в вашей базе данных нет никаких проблем, тогда это настройка laravel в вашем файле config-> database.php , просто установите 'strict' на 'false'.

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8',
    'collation' => 'utf8_general_ci',
    'prefix' => '',
    'strict' => false,
    'engine' => null,
],
0 голосов
/ 09 марта 2019

Это ошибка базы данных, не связанная с Laravel.Выполнение точно такого же запроса в базе данных также должно завершиться неудачей, если это не так, то должно произойти :).

Вам необходимо также сгруппировать по другим полям в вашем запросе "new_date", "month" и "year".Попробуйте что-то вроде этого:

Order::selectRaw("COUNT(id) AS `data`, DATE_FORMAT(created_at, '%m-%Y') AS new_date, YEAR(created_at) AS `year`, MONTH(created_at) AS `month`")
    ->groupBy('year', 'month', 'new_date')->get();
...