次のように見えた私が持っていた古き良きコードに起因のMySQL 5.7以上の変化に、SQLモードONLY_FULL_GROUP_BYがデフォルトで有効になっているようだ:特定の列に基づいてすべての個別の行を取得するにはどうすればよいですか?
...Table::where('name', 'LIKE', '%'.$search_str.'%')
->groupBy('name')
->get();
が今エラーがスローされます
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
私のコードをさまざまな方法で更新して、動作させることを試みましたが、運がないようにしました。
これは私が現在持っているものです。
Table::where('name', 'LIKE', '%'.$search_str.'%')
->selectRaw('name, ANY_VALUE(id), ANY_VALUE(col_a), ANY_VALUE(col_b), ANY_VALUE(col_c), ANY_VALUE(col_d)')
->groupBy('name')
->get();
は、これはすべてのエラーをスローしませんが、列データが欠落しています。
私も試してみた:
「名前」に基づいて個別の行を返さないTable::where('name', 'LIKE', '%'.$search_str.'%')
->groupBy('name')
->groupBy('id')
->get();
を。それはただすべてを返します。
Laravel Eloquentまたはraw MySQLでこれを行うにはどうすればよいですか?
あなたは ' - > distinct() - > get();'を試しましたか – EddyTheDove
私はdistinct()も調べました。しかし、1つの行だけを返します。私は複数の行を取得しようとしています。 – rotaercz