Laravel Eloquent:无需With,如何用withCount统计用户所属组数量
解决方法:直接利用集合的
count()方法获取总数 你提到用$userGroups = UserView::findOrFail($userId)->groups()->get();能拿到用户的所有组,但以为需要foreach统计总数——其实完全没必要,Laravel的Collection集合本身就自带count()方法,可以直接获取集合的元素数量,不需要手动遍历。
具体代码可以这么写:
// 获取用户所属的所有组集合 $userGroups = UserView::findOrFail($userId)->groups()->get(); // 直接通过集合的count()方法统计总数 $groupCount = $userGroups->count();
这样既拿到了完整的组数据,又高效地得到了总数,而且不会返回任何多余的用户数据,完全符合你的需求。
补充:如果只想获取总数(不需要组数据)
如果有时候你只需要统计数量而不需要组的具体数据,可以直接调用关联的count()方法,这样只会执行一次计数查询,性能更优:
$groupCount = UserView::findOrFail($userId)->groups()->count();
为什么之前的withCount会带回用户数据?
withCount是给**主模型(这里是UserView)**添加一个统计字段,所以必然会返回用户模型实例。而你的需求是只获取组数据,所以从关联关系直接查询组集合,再用集合的count()方法才是最直接的方案。
内容的提问来源于stack exchange,提问作者Jonathan Lightbringer
相关产品推荐
相关产品推荐

