Laravel关联查询在controller正常运行但blade无法显示withCount统计值
问题根因
- 你的查询结尾调用了
first()方法,返回的是单个Types模型实例,不是模型集合,直接遍历$types属于逻辑错误,遍历单个模型对象只会读取它自身的公开属性,无法正确获取预加载的关联数据下的统计值。 - 你在
purposes关联的闭包查询中调用了withCount('pool'),所以统计值是挂载在每一条purposes关联模型上的,字段名是pool_count,你代码里写的pool_purposes_count是错误的命名,自然无法读取。
解决方法
- 可以先优化查询写法,Laravel支持更简洁的嵌套关联预加载写法,功能和你原有代码一致:
$types = Types::where('id', '=', '2') ->with(['purposes' => function ($query) { $query->withCount('pool'); }]) ->first();
- 调整Blade中的遍历逻辑,遍历
$types下预加载的purposes关联集合即可:
@foreach($types->purposes as $item) {{ $item->pool_name }} {{ $item->pool_count }} @endforeach
排查建议
如果调整后还是无法正常取值,可以在Blade中先输出{{ dd($types->purposes->toArray()) }}打印关联数据结构,确认统计字段是否正常挂载、字段名是否匹配即可。
内容的提问来源于stack exchange,提问作者Harrika
相关产品推荐
相关产品推荐

