Laravel Eloquent の sql_mode=only_full_group_by との互換性がないトラブルシューティング
Laravel Eloquent クエリを実行すると、sql_mode=only_full_group_by に関連するエラーが発生する可能性があります。 。このエラーは、クエリの GROUP BY 句に非集計列が含まれている場合に発生します。
原因:
このエラーは、すべての列を必要とする厳密な MySQL モードによって発生します。 SELECT リスト内で、GROUP BY 句でグループ化または集約されます。提供された Eloquent クエリでは、id 列は SELECT リストに含まれていますが、GROUP BY 句には含まれていません。
解決策:
推奨される解決策は次のとおりです。データベース接続設定で厳密な MySQL モードを無効にします。これは、config/database.php ファイルに以下を追加することで実行できます:
'mysql' => [ 'strict' => false, ],
代替解決策:
厳密モードを無効にするオプションがない場合を使用すると、クエリを変更して、SELECT リスト内のすべての列がグループ化または集約されるようにすることができます。クエリ例の場合、これは Product::raw('COUNT(*) as product_count') を SELECT 句に追加し、store_id と id:
$products = Product::where('status', 1) ->where('stock', '>', 0) ->where('category_id', '=', $category_id) ->groupBy(['store_id', Product::raw('id')]) ->orderBy('updated_at', 'desc') ->take(4) ->get();の両方でグループ化することで実現できます。
以上がLaravel Eloquent クエリの「sql_mode=only_full_group_by」競合を解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。