Laravel Eloquent 中與sql_mode=only_full_group_by 不相容
遇到錯誤「SELECT 清單的表達式#1 不在GROUP BY 子句中.. ." 當執行帶有分組的Eloquent 查詢時,表示與MySQL不相容於sql_mode=only_full_group_by。若要解決此問題:
停用 MySQL 嚴格模式
一種解決方案是在資料庫連線配置中停用 MySQL 嚴格模式設定。在Laravel 的.env 檔案中,新增以下行:
DB_STRICT_MODE=false
或者,您可以在config/database.php 檔案中設定嚴格模式:
'mysql' => [
// Disable strict mode
'strict' => false,
],
說明
在MySQL 5.7 及更高版本中,sql_mode=only_full_group_by 模式要求SELECT 列表中的所有列要么包含在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();
列 id(主鍵)出現在 SELECT 清單中,但不包含在 GROUP BY 子句中。透過停用嚴格模式,MySQL 將允許 SELECT 清單中存在功能上不依賴 GROUP BY 列的非聚合列。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3