laravel5.3 groupBy 报错问题

return $query->groupBy('type')->select('classification');

这样写的话会报出错误:

SQLSTATE[42000]: Syntax error or access violation: 1055 'robotac.archives.classification' isn't in GROUP BY (SQL: select `classification` from `archives` group by `type`)

select 中只有传入跟 groupBy 一样的字段才能正常运行,即写成:

return $query->groupBy('type')->select('type'); 

但是只取一个字段不就跟 distinct 一样了么

我查了一下,这句代码转换成的 sql 语句直接运行是可以的,而且似乎这个问题是 5.3 版本才出现的。这个该怎么解决呢?

JellyBool

5.3 之后至少你可以写成这样试试:

return $query->groupBy('type')->select(['classification','type']);
杨宁 回复 JellyBool

不行,这么写还是报同样的错

JellyBool 回复 杨宁

具体报什么错?这样呢?

return $query->select(['classification','type'])->groupBy('type');
杨宁 回复 JellyBool

同样的错误,

SQLSTATE[42000]: Syntax error or access violation: 1055 'robotac.archives.classification' isn't in GROUP BY (SQL: select `classification`, `type` from `archives` group by `type`)

select 写前写后是一样的。

我现在想到的替代方法是直接 select() 得到想要数据的 collection 类型结果,再用 collection 的 groupBy 方法来代替 queryBuilder 里的 groupBy

JellyBool 回复 杨宁

理论上感觉没什么错误啊,难道是因为没有查找id 的原因:

return $query->select(['id','classification','type'])->groupBy('type');

这样还是会报错么?

杨宁 回复 JellyBool

是啊,只有 select 和 groupBy 里传相同参数的时候才不报错… 简直了

载木火车
简直了。。今天也遇到了

载木火车

‘strict’ => false?

lexin 回复 载木火车

大哥,回答要说全套…conf/database.php中, mysql配置的strict(严格的), 设置成false
就OK了.

magic

groupBy好气人啊,我发现5.4报错了,改为’strict’ => false也不行,直接数据库链接就卡住了

补充:‘strict’ => false是可以的,但要有耐性,我是卡住了好几次,才行。
经过这次教训,再也不敢玩非LTS版本了。。。太恐怖