Laravel Eloquent で MySQL の「sql_mode=only_full_group_by と互換性がありません」エラーを解決するにはどうすればよいですか?

DDD
リリース: 2024-11-22 16:16:47
オリジナル
878 人が閲覧しました

How to Resolve MySQL's

Laravel Eloquent での MySQL の「sql_mode=only_full_group_by と互換性がない」問題の解決

データベース操作に Laravel Eloquent を使用するときに頻繁に発生する問題は、MySQL エラー「式 #1」です。 SELECT リストの が GROUP BY 句に含まれておらず、次のものが含まれています非集計列[...]。」このエラーは、only_full_group_by として知られる MySQL の厳密モードが原因で発生します。

この問題を例として、次の Eloquent クエリを考えてみましょう:

$products = Product::where('status', 1)
            ->where('stock', '>', 0)
            ->where('category_id', '=', $category_id)
            ->groupBy('store_id')
            ->orderBy('updated_at', 'desc')
            ->take(4)
            ->get();
ログイン後にコピー

このクエリを実行すると、前述の MySQL エラーが発生する可能性があります。その理由は、MySQL のonly_full_group_by モードでは、SELECT リスト内のすべてのカラムが集計関数 (COUNT、SUM など) であるか、GROUP BY 句に含まれている必要があるためです。ただし、このクエリでは、id 列は GROUP BY 句には含まれていませんが、SELECT リストには存在します。

この問題を解決するには、データベース接続設定で MySQL の厳密モードを無効にすることが効果的な方法の 1 つです。 :

'connections' => [
    'mysql' => [
        // Disabling strict mode for MySQL 5.6
        'strict' => false,
    ]
]
ログイン後にコピー

または、列を GROUP BY に追加することもできます。句:

$products = Product::where('status', 1)
            ->where('stock', '>', 0)
            ->where('category_id', '=', $category_id)
            ->groupBy('store_id', 'id')
            ->orderBy('updated_at', 'desc')
            ->take(4)
            ->get();
ログイン後にコピー

厳密モードを緩和するか、MySQL の要件に一致するようにクエリを調整することにより、このエラーを排除し、データを正常に取得できます。

以上がLaravel Eloquent で MySQL の「sql_mode=only_full_group_by と互換性がありません」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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