我有一个非常非常奇怪的问题。我们的团队有一段时间忽略了这一点,因为它没有破坏任何东西(我知道,这不是一个好的态度),但我真的很想知道到底发生了什么/可能发生了什么。我们使用的是 Laravel 5.2。
我们使用 laravel eloquent 查询构建器构建了非常长的查询。由于某种原因,有时,当我们执行 toSql() 时,我们会得到我们想要运行的查询。粘贴查询时,我会收到如下错误:
错误代码:1055。SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含非聚合列“onion.distance”,该列在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容
但奇怪的是,不做任何改变,laravel 就会很好地运行查询!任何人都知道为什么 laravel 可以正常运行查询,但 toSql 输出会触发此错误?我们如何避免它(除了手动添加分组依据之外)。
除非有要求,否则不会粘贴代码(某些查询有很多移动部分)。
最佳答案
感谢 Marcin Nabialek,你是 100% 正确的。 Laravel 覆盖了默认的 mysql 服务器配置并将严格模式设置为 false。对于像我一样困惑的人:
数据库.php
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'dump_command_timeout' => 60 * 15, // 5 minute timeout
'unix_socket' => env('UNIX_SOCKET', ''),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', 'mysqltest'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
]
我所要做的就是将严格设置为true
'strict' => true
关于php - laravel 会自动添加分组依据吗? Laravel toSql 与正在运行的查询的奇怪行为。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47999958/