LaravelでgroupBy追加後、SQLSTATE[42000]: Syntax error or access violation: 1055 Expressionエラーが発生。対処法をまとめておきます。
実行環境
- CentOS:7.5
- mysql:5.7.23
- Laravel:5.7.6
Syntax error or access violation: 1055 Expression発生
LaravelクエリビルダでGROUP_BY追加後、以下のエラーが発生。
| SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #8 of SELECT list is not in GROUP BY clause and contains nonaggregated column … |
こちらの記事を参考にして、my.cnfに以下の設定を追加。

MySQL 5.7.5+ でのGROUP BYエラー #MySQL - Qiita
メモ結論5.7.5で仕様変わったから、my.cnfを変更して、前の動作させるエラ…
qiita.com
/etc/my.cnf
| [mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
MySQLを再起動。
うーん…。エラー変わらず。
Syntax error or access violation: 1055 Expressionを解消する方法
というわけでこちらを参考にdatabase.phpを修正。

Group by not working - Laravel - Stack Overflow
I'm not able to run this simple que…
stackoverflow.com
/config/database.php
| 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'hoge'), 'port' => env('DB_PORT', 'hoge'), 'database' => env('DB_DATABASE',hoge), 'username' => env('DB_USERNAME', hoge), 'password' => env('DB_PASSWORD', hoge), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], |
以下の’strict’をtrueからfalseに修正します。
すると無事にエラーが解消されました。
ただstrictモードを無効にすることはあまり良くないよう。バージョン5.7以降のMySQLサーバを使用していることが原因みたいです。
このバージョンからは、GROUP BYSQL99に準拠するように動作するため、やはりMySQLサーバの設定を変更することが推奨されているみたい。