首頁 >後端開發 >php教程 >LaravelWhereIn 和 GroupBy:如何解決「1055 錯誤」?

LaravelWhereIn 和 GroupBy:如何解決「1055 錯誤」?

Barbara Streisand
Barbara Streisand原創
2024-12-08 03:21:11846瀏覽

Laravel WhereIn and GroupBy: How to Resolve the

Laravel:了解WhereIn 和 GroupBy 查詢中的「1055 錯誤」

問題:

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

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