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

Laravel:如何在Blade模板中统计关联字段符合条件的集合数量?

正确统计Laravel集合中关联字段满足条件的记录数

你的写法问题出在where方法的参数使用上——你直接把整个集合的spec->id传进去了,但我们需要针对集合里的每一个character实例去检查它的关联spec的id是否符合条件。下面给你两种常用的解决方案,你可以根据场景选择:

方案1:数据库层面统计(推荐,更高效)

如果还没从数据库拉取所有characters数据,建议直接在Eloquent查询阶段就完成统计,这样不用把全量数据加载到内存里再过滤,性能更好。

在控制器或者模型里先执行查询:

// 假设你的模型是Character,关联方法是spec
$spec10Count = Character::whereHas('spec', function ($query) {
    $query->where('id', 10);
})->count();

然后在Blade模板里直接输出这个统计值:

{{ $spec10Count }}

方案2:集合层面过滤统计(已拿到全量集合时使用)

如果已经获取了$characters集合(比如之前已经查询了所有角色数据),可以用集合的filter方法逐个检查元素的关联属性:

{{ $characters->filter(function ($character) {
    // 加上判断避免spec为null时报错
    return $character->spec && $character->spec->id === 10;
})->count() }}

如果你的Laravel版本支持集合的点语法嵌套查询(通常Laravel 8+都支持),也可以简化成:

{{ $characters->where('spec.id', 10)->count() }}

不过要注意,如果有character的spec关联为null,这种写法可能会抛出错误,所以还是推荐带判断的filter写法更稳妥。

内容的提问来源于stack exchange,提问作者Kenneth Poulsen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:27:47