ホームページ > バックエンド開発 > PHPチュートリアル > Laravel EloquentのSQL_MODE=ONLY_FULL_GROUP_BYの非互換性を修正する方法?

Laravel EloquentのSQL_MODE=ONLY_FULL_GROUP_BYの非互換性を修正する方法?

Linda Hamilton
リリース: 2024-10-18 12:27:03
オリジナル
963 人が閲覧しました

How to Fix SQL_MODE=ONLY_FULL_GROUP_BY Incompatibility in Laravel Eloquent?

Fixing SQL_MODE=ONLY_FULL_GROUP_BY Incompatibility in Laravel Eloquent

Laravel Eloquent allows for powerful data manipulation operations, but sometimes you may encounter errors when executing queries. One such error is related to the MySQL strict mode setting, specifically when sql_mode=only_full_group_by is enabled.

Error:

When you execute a query like the one below, you might get an error:

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

The error message typically looks like this:

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)
ログイン後にコピー

Solution:

The solution to this error is to disable the MySQL strict mode setting. This can be done in the database connection settings of your Laravel application:

<code class="php">'connections' => [
    'mysql' => [
        // Behave like MySQL 5.6
        'strict' => false,

        // Behave like MySQL 5.7
        'strict' => true,
    ]
]</code>
ログイン後にコピー

By setting strict to false, you are effectively disabling the only_full_group_by mode and allowing non-aggregated columns in the SELECT list.

Additional Tips:

Refer to Matt Stauffer's blog post for more advanced configuration options related to this issue. Disabling only_full_group_by may have implications for certain types of queries, so you should consider your application's requirements before making changes.

以上がLaravel EloquentのSQL_MODE=ONLY_FULL_GROUP_BYの非互換性を修正する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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