問題:
在 Laravel中,嘗試在單一查詢中同時使用WhereIn和GroupBy子句會產生以下結果錯誤:
SQLSTATE[42000]: Syntax error or access violation: 1055 'sbrtpt.loading.id' isn't in GROUP BY
解釋:
預設情況下,Laravel 的資料庫配置強制執行嚴格的SQL 模式,該模式要求WHERE 子句中引用的每個欄位也必須出現在如果查詢包含GROUP BY操作,則使用 GROUP BY 子句。在這種特殊情況下,id列包含在WhereIn子句中,但不包含在GroupBy子句中,導致錯誤。
解決方案:
有兩種可能的解決方案解決此問題:
選項1:停用Strict模式
選項1:停用Strict模式
'mysql' => [ ... 'strict' => false, ... ]
選項1:停用Strict模式
選項1:停用Strict模式
要停用嚴格模式,請導覽至config/database.php 檔案並修改mysql陣列設置,如下所示:
'modes' => [ // Disable this to allow grouping by one column 'ONLY_FULL_GROUP_BY', // Other strict mode options ]
透過將 strict 設為 false,您可以有效地停用所有嚴格模式規則。
選項2:指定特定模式或者,如果您希望保留嚴格模式,同時僅停用導致問題的特定規則,請修改config/database.php 中“mysql”數組中的“modes”選項。例如,要停用ONLY_FULL_GROUP_BY 模式,請新增下列行:其他資訊:通常建議使用第二個選項(指定特定的模式),因為它允許您僅停用必要的嚴格模式規則,同時保持嚴格模式的優點。透過檢視特定資料庫管理系統(例如 MySQL)的文檔,您可以確定哪些其他模式適合處理此錯誤。以上是LaravelWhereIn 和 GroupBy:如何解決「1055 錯誤」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!