Laravel groupBy 不工​​作抛出错误语法错误或访问冲突:1055

Laravel groupBy is not working throwing error Syntax error or access violation: 1055

我已经尝试过其他问题的解决方案,但这并没有解决我的问题。我已将 stricttrue 更改为 false。使用的模式

'modes' => [           
    'STRICT_TRANS_TABLES',
    'NO_ZERO_IN_DATE',
    'NO_ZERO_DATE',
    'ERROR_FOR_DIVISION_BY_ZERO',
    'NO_AUTO_CREATE_USER',
    'NO_ENGINE_SUBSTITUTION'
] 

还有。但是我得到了同样的错误。

$orders = Order::orderBy('id', 'desc')->groupBy('order_id')->get();
dd($orders);

这是抛出错误

Syntax error or access violation: 1055 'my_db.orders.id' isn't in GROUP BY (SQL: select * from orders group by order_id order by id desc)

(我正在使用 Laravel 5.6)

config/database.php

'strict' => true 更改为 'strict' => false 并清除缓存

php artisan config:cache

或在 MySql 设置更改

mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

简答

这是一个 MySQL 问题,可以通过更改 Laravel 配置来解决,如 @Rp9 所写,将 strict => true 修改为 strict => false in config/database.php

长答案

MySQL 5.7 引入了我们称为 "strict mode," 的东西,它是新模式的组合,总而言之,使 MySQL 比以前更严格地处理您的查询。

"Strict mode" 是模式列表 MySQL 5.7 默认启用,包括以下模式:

ONLY_FULL_GROUP_BY
STRICT_TRANS_TABLES
NO_ZERO_IN_DATE
NO_ZERO_DATE
ERROR_FOR_DIVISION_BY_ZERO
NO_AUTO_CREATE_USER
NO_ENGINE_SUBSTITUTION

那么,如果您只想禁用/启用这种严格模式中的一部分怎么办? Laravel 帮助我们。

'connections' => [
    'mysql' => [
        // Ignore this key and rely on the strict key
        'modes' => null,

        // Explicitly disable all modes, overriding strict setting
        'modes' => [],

        // Explicitly enable specific modes, overriding strict setting
        'modes' => [
            'STRICT_TRANS_TABLES',
            'ONLY_FULL_GROUP_BY',
        ],
    ]
]