Laravel groupBy无法正常工作抛出错误语法错误或访问冲突:1055

时间:2018-03-21 07:35:56

标签: php mysql laravel-5.6

我在其他问题上尝试过解决方案,但这并没有解决我的问题。我已将严格 true 变为 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);

这会引发错误语法错误或访问冲突:1055'my_db.orders.id'不在GROUP BY中(SQL:从orders组中选择*按order_id命令由id desc)

(我正在使用Laravel 5.6)

2 个答案:

答案 0 :(得分:6)

在config / database.php中 改变严格的' =>真的要严格要求' =>假 并清除缓存

php artisan config:cache

OR

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

答案 1 :(得分:2)

简短回答

这是一个MySQL问题,可以解决更改Laravel配置为@ Rp9编写,将 a b c d e row2 0 -1 1 NA 0 row3 0 NA 0 0 NA row4 0 1 -1 0 1 修改为strict => true中的strict => false

长答案

MySQL 5.7引入了一些我们称之为“严格模式”的东西,它是新模式的组合,总之,使MySQL能够比以前更严格地处理您的查询。

“严格模式”是MySQL 5.7默认启用的模式列表,包括以下模式:

config/database.php

那么,如果您想要禁用/启用这种严格模式,该怎么办? Laravel帮助我们。

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