Laravel groupBy 不工作抛出错误语法错误或访问冲突:1055
Laravel groupBy is not working throwing error Syntax error or access violation: 1055
我已经尝试过其他问题的解决方案,但这并没有解决我的问题。我已将 strict 从 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);
这是抛出错误
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',
],
]
]
我已经尝试过其他问题的解决方案,但这并没有解决我的问题。我已将 strict 从 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);
这是抛出错误
Syntax error or access violation: 1055 'my_db.orders.id' isn't in GROUP BY (SQL: select * from
orders
group byorder_id
order byid
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',
],
]
]