Laravel Eloquent クエリの「sql_mode=only_full_group_by」競合を解決する方法?

Susan Sarandon
リリース: 2024-11-19 10:12:02
オリジナル
876 人が閲覧しました

How to Resolve `sql_mode=only_full_group_by` Conflicts in Laravel Eloquent Queries?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート