LaravelでGroupByのエラー回避
EloquentでGroupByを使用するとエラーが発生してしまいます。
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression
目次
解決手段
- config/database.phpの “strict”モードをfalseにする
- CollectionのGroupBy関数を使用する
- DB::rawメソッドを使用する
config/database.phpの “strict”モードをfalseにする
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', 'root'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8',
'collation' => 'utf8_general_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
CollectionのGroupBy関数を使用する
CollectionのGroupBy関数を使用することで同様の結果を得られます。
Book::Where('released_at', '>', $today)->get()->GroupBy('released_at');
DB::rawメソッドを使用する
DB::table('books')
->groupBy('released_at')
->having('released_at', '>', $today)
->get();