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

Laravel8 Eloquent查询groupBy后如何排除关联关系为null的条目

Laravel 8 过滤groupBy后关联关系为null条目的解决方案

方案1:查询阶段直接过滤(性能最优,推荐使用)

在构造SQL查询时通过whereHas()方法直接排除不存在对应关联的记录,后续groupBy的结果天然不会出现关联为null的条目:

// 替换yourModel为你的模型名,relationName为你定义的关联方法名
$result = yourModel::query()
    ->whereHas('relationName')
    ->with('relationName')
    ->groupBy('关联表.分组字段名')
    ->get();

如果需要直接基于关联表字段做分组,也可以用内连接join()实现,同样会自动过滤无关联的记录:

$result = yourModel::query()
    ->join('关联表名', '主表.外键字段', '=', '关联表.主键字段')
    ->select('主表.*', '关联表.所需字段名')
    ->groupBy('关联表.分组字段名')
    ->with('relationName')
    ->get();

方案2:集合层面过滤(适用于已拿到查询结果的场景)

如果已经执行完查询得到了结果集,可以调用Laravel集合的filter()方法手动过滤:

$result = yourModel::query()
    ->with('relationName')
    ->groupBy('分组字段名')
    ->get()
    ->filter(fn ($item) => !is_null($item->relationName))
    ->values(); // 重置过滤后的集合索引,避免出现索引跳号问题

内容的提问来源于stack exchange,提问作者Andrei Duca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:45:01