修正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中文網其他相關文章!