Laravel Eloquent での MySQL の「SELECT リストの式 #1 が GROUP BY にありません」エラーを解決する
Laravel Eloquent で一般的なエラーが発生しました「SELECT リストの式 #1 が GROUP BY 句にありません」エラーは次の場合に発生します。 groupBy() メソッドを使用します。これは通常、他の列で集計が実行されているときに、非集計列が SELECT リストに含まれている場合に発生します。
次の Laravel Eloquent クエリを考えてみましょう:
$products = Product::where('status', 1) ->where('stock', '>', 0) ->where('category_id', '=', $category_id) ->groupBy('store_id') ->orderBy('updated_at', 'desc') ->take(4) ->get();
このクエリを実行すると、次のような可能性があります。次のエラーが発生します:
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'myshop.products.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (SQL: select * from products where status = 1 and stock > 0 and category_id = 5 group by store_id order by updated_at desc limit 4)
この問題を解決するには、MySQL の strict を無効にします。データベース接続設定のモード。このモードでは、より厳密な SQL 構文と列グループ化が適用されるため、実行中のクエリと競合する可能性があります。
config/database.php ファイルでデータベース構成を変更します。
'connections' => [ 'mysql' => [ // Behave like MySQL 5.6 'strict' => false, // Behave like MySQL 5.7 'strict' => true, ] ]
厳密な値を設定します。 MySQL 接続の厳密モードを無効にするには、オプションを false に設定します。これにより、「Expression #1 of SELECT List Not in GROUP BY」エラーが解決されるはずです。
より高度な構成設定については、Matt Stauffer によるブログ投稿を参照してください。
以上がLaravel Eloquent の「SELECT リストの式 #1 が GROUP BY にありません」という MySQL エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。