php - laravel 会自动添加分组依据吗? Laravel toSql 与正在运行的查询的奇怪行为。

标签 php mysql laravel

我有一个非常非常奇怪的问题。我们的团队有一段时间忽略了这一点,因为它没有破坏任何东西(我知道,这不是一个好的态度),但我真的很想知道到底发生了什么/可能发生了什么。我们使用的是 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/

相关文章:

php - 如何检查变量是否包含某些特定文本

php - 在 CakePHP 中,如何计算来自联合操作的匹配项?

mysql - 如何使用 MySQL 防止 Hibernate 将主机名附加到用户名

php - 多个 Inner Join 删除属性

php - Laravel 5.7 无法找到名称为 [default] [App\User] 的工厂

php - Laravel - 如何获得特定用户的委托(delegate)角色

PHP 密码 crypt 给出奇怪的结果

php , mysql 插入 $ 符号不起作用

php - 未从 Laravel 中的原始查询返回任何结果

php - php 代码之前的 javascript 警报