LaravelでGroupByのエラー回避

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();