Laravel 5.8中如何执行groupBy?求助分组查询报错问题
解决Laravel groupBy查询报错并获取指定数组结果
看起来你遇到的问题是因为Laravel默认开启了MySQL严格模式(strict mode),其中包含ONLY_FULL_GROUP_BY规则——当你使用groupBy('title')但通过get()获取所有列数据时,数据库会因为非分组列未被聚合而抛出错误。而且你实际只需要title列的唯一值数组,完全不需要返回整行数据,所以可以调整写法来解决问题:
方案一:使用distinct()直接获取唯一title值(更简洁)
public function types() { return DB::table('graphs')->distinct()->pluck('title')->toArray(); }
distinct()会自动过滤title列的重复值pluck('title')只提取title列的数据toArray()将集合转换为你需要的普通数组格式
方案二:结合groupBy()获取目标结果
如果你更倾向于使用groupBy,需要确保只选择被分组的列,避免触发ONLY_FULL_GROUP_BY的限制:
public function types() { return DB::table('graphs')->groupBy('title')->pluck('title')->toArray(); }
为什么原来的写法会报错?
你的原代码DB::table('graphs')->groupBy('title')->get()会尝试返回graphs表中所有列的数据,但根据SQL标准,非分组列必须使用聚合函数(比如MAX()、MIN())才能被查询。Laravel默认的严格模式会强制执行这个规则,所以导致报错。
以上两种方案都能直接得到你期望的结果:['MBN_PRIVATE','MBN_GUEST','SPWIFI']。
内容的提问来源于stack exchange,提问作者code-8
相关产品推荐
相关产品推荐

