Laravel Eloquent 中與sql_mode=only_full_group_by 不相容的問題排查
執行Laraby Eloquull_vel,可能會與遇到問題相關的錯誤。當查詢的 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中文網其他相關文章!