问题:
在 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模式
要禁用严格模式,请导航到 config/database.php 文件并修改 mysql 数组设置,如下所示:
'mysql' => [ ... 'strict' => false, ... ]
通过将 strict 设置为 false,您可以有效地禁用所有严格模式规则。
选项 2:指定特定模式
或者,如果您希望保留严格模式,同时仅禁用导致问题的特定规则,请修改 config/database.php 中“mysql”数组中的“modes”选项。例如,要禁用 ONLY_FULL_GROUP_BY 模式,请添加以下行:
'modes' => [ // Disable this to allow grouping by one column 'ONLY_FULL_GROUP_BY', // Other strict mode options ]
其他信息:
通常建议使用第二个选项(指定特定的模式),因为它允许您仅禁用必要的严格模式规则,同时保持严格模式的优点。通过查看特定数据库管理系统(例如 MySQL)的文档,您可以确定哪些其他模式适合处理此错误。
以上是LaravelWhereIn 和 GroupBy:如何解决'1055 错误”?的详细内容。更多信息请关注PHP中文网其他相关文章!