首頁 > 後端開發 > 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?

修正Laravel Eloquent 中SQL_MODE=ONLY_FULL_GROUP_BY 不相容的問題

Laravel Eloquent 允許進行強大的資料操作時可能會遇到錯誤。其中一個錯誤與 MySQL 嚴格模式設定有關,特別是啟用 sql_mode=only_full_group_by 時。

錯誤:

當您執行以下查詢時,您可能會收到錯誤:

$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 嚴格模式設定。這可以在 Laravel 應用程式的資料庫連接設定中完成:

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

        // Behave like MySQL 5.7
        'strict' => true,
    ]
]</code>
登入後複製

透過將 strict 設為 false,您可以有效地停用 only_full_group_by 模式並允許 SELECT 清單中的非聚合列。

其他提示:

請參閱 Matt Stauffer 的部落格文章,以了解與此問題相關的更多進階設定選項。停用 only_full_group_by 可能會對某些類型的查詢產生影響,因此您應該在進行變更之前考慮應用程式的要求。

以上是如何修復 Laravel Eloquent 中的 SQL_MODE=ONLY_FULL_GROUP_BY 不相容問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板