首頁 >資料庫 >mysql教程 >如何解決 Laravel Eloquent 查詢中的 sql_mode=only_full_group_by 衝突?

如何解決 Laravel Eloquent 查詢中的 sql_mode=only_full_group_by 衝突?

Susan Sarandon
Susan Sarandon原創
2024-11-19 10:12:02936瀏覽

How to Resolve `sql_mode=only_full_group_by` Conflicts in Laravel Eloquent Queries?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn