首頁 >後端開發 >php教程 >如何修復由於 MySQL 嚴格模式導致 Laravel Eloquent 中的「SELECT 清單的表達式 #1 不在 GROUP BY 子句中」錯誤?

如何修復由於 MySQL 嚴格模式導致 Laravel Eloquent 中的「SELECT 清單的表達式 #1 不在 GROUP BY 子句中」錯誤?

Linda Hamilton
Linda Hamilton原創
2024-10-18 12:29:03676瀏覽

How to Fix

與Laravel Eloquent 中的sql_mode=only_full_group_by 不相容

停用 MySQL 嚴格模式

解決方案是在資料庫連線配置中停用 MySQL 嚴格模式設定。在Laravel 的.env 檔案中,加入以下行:

DB_STRICT_MODE=false
或者,您可以在config/database.php 檔案中設定嚴格模式:

<code class="php">'mysql' => [
    // Disable strict mode
    'strict' => false,
],</code>

說明

在MySQL 5.7 及更高版本中,sql_mode=only_full_group_by 模式要求SELECT 清單中的所有欄位都包含在GROUP BY 子句中或為聚合函數。在提供的查詢中:

<code class="php">$products = Product::where('status', 1)
            ->where('stock', '>', 0)
            ->where('category_id', '=', $category_id)
            ->groupBy('store_id')
            ->orderBy('updated_at', 'desc')
            ->take(4)
            ->get();</code>
列 id(主鍵)出現在 SELECT 清單中,但不包含在 GROUP BY 子句中。透過停用嚴格模式,MySQL 將允許 SELECT 清單中存在功能上不依賴 GROUP BY 列的非聚合列。

以上是如何修復由於 MySQL 嚴格模式導致 Laravel Eloquent 中的「SELECT 清單的表達式 #1 不在 GROUP BY 子句中」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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