我已经尝试了其他问题的解决方案,但这并不能解决我的问题。我把严格从真到假。使用模式
'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(
在配置/数据库中.php
将'strict' => true
更改为'strict' => false
并清除缓存
PHP Artisan Config:Cache
或在 MySql 中更改设置。
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
简答
这是一个MySQL问题,可以解决,可以按照@Rp9编写的方式更改Laravel配置,在config/database.php
中将strict => true
修改为strict => false
。
长答案
MySQL 5.7引入了我们称之为"严格模式"的东西,这是新模式的组合,总而言之,使MySQL处理你的查询比以前更严格。
"严格模式"是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
那么,如果您只想禁用/启用这种严格模式中的几个怎么办?拉拉维尔帮助我们。
'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',
],
]
]