Laravel:GroupByでSQLSTATE[42000]:Syntax error or access violation: 1055発生

Laravel:GroupByでSQLSTATE[42000]:Syntax error or access violation: 1055発生

Laravel:GroupByしたらエラーが発生

操作性を上げようとGroupByで重複削除しようと画策し組んでみたところエラーが発生。

実行 ⇒ SQLSTATE[42000]:Syntax error or access violation: 1055

調べてみたらEloquantではGroup Byは使えないとの事。
それならと思いクエリビルダで組んでみましたがこれもダメ。

う~ん、どうしたら…と言うことで調べた事をまとめます。

Laravelでgroupbyを使う方法は2つある

  1. config\database の値をイジる
  2. 直接SQLを書く

Laravelでは基本的に使えない様にしているようです。
そんな…。
マニュアルを見ると「使いたかったらインジェクション攻撃に注意して直接SQL発行してね」と書いてあります。
なるほど。

config\database の値をイジる

Laravelフォルダの config\database にGroupByを規制している場所があるそうです。

この中の【’strict’ => true】が原因の様で、値を【 false 】に変更します。

この strict はGroupBy以外にもいろいろ規制しているとの事。
う~ん、よく解らないからこそこういう所いじるのは怖いのです。

と言うことで、GroupByだけ解除する方法は無いか探してみました。

結果、modes を追加して許可するものを決めれるらしい。

えっ、それもレベル高いです…。

他のエラーが生じた時、ココが原因となっても嫌なので、素直にマニュアルに従う事にしました。

直接SQLを書く

直接書く事で「インジェクション攻撃が…」とはなりますが、まぁそんなに直接書くパートがある訳じゃないので。

うん、狙い通りに動いてます。

まとめ

DBを扱う以上、グループにまとめて集計するなんて事よくあります。

そんな時は頻度に応じて【直接書く】【コンフィグいじる】を選べばよさそうですね。

私の作成中のアプリでは頻度が少ないので【直接書く】で行こうと思います。

Concatも直接実行でした。