You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:10:22