Laravel count Eloquent belongsToMany 相关模型

Posted

技术标签:

【中文标题】Laravel count Eloquent belongsToMany 相关模型【英文标题】:Laravel count Eloquent belongsToMany related model 【发布时间】:2017-02-04 04:53:46 【问题描述】:

我是 Laravel 新手,遇到以下问题: 我有一个用于用户和组的表,以及一个用于连接它们的表。任何用户都可以加入任何组的一般任务。

----------------------------------------------
| users        | groups     | user_groups    |
|--------------------------------------------|
| id - int pk  | id - pk    | id - pk        |
| name text    | name       | user_id - fk   |
| email        |            | group_id - fk  |
| phone        |            | any_attr       |
----------------------------------------------

我有以下型号:

class User

    ...
    public function groups()
    
        return $this->belongsToMany(Group::class, 'user_groups')->withPivot(['is_notification_requested']);
    
    ...



class Group

    ...
    public function users()
    
        return $this->belongsToMany(User::class, 'user_groups');
    
    ...

如何获取所有组以及成员数?我需要 Group 模型,以及组中的用户数。

【问题讨论】:

是否需要将计数作为返回对象的先前计算的属性,还是可以在打印值时计算? 你使用的是 Laravel 5.2 还是 5.3? Laerte: 好吧,我什么时候得到价值没关系。我只需要一个组列表,以及组中用户的数量。它是一个分页列表。 Ollieread: Laravel 5.3 【参考方案1】:

如果您使用的是 Laravel 5.3,您可以简单地添加 withCount('relationship'),如下所示:https://laravel.com/docs/5.3/eloquent-relationships#counting-related-models

下面是您的代码的示例:

$groups = Group::withCount('users')->get();

现在你可以这样做了:

foreach($groups as $group) 
    echo $group->user_count

【讨论】:

我不知道这个。当然,这是一个更好的解决方案。 这是 5.3 的新功能。 两者都工作正常! :) 但我想我应该使用 withCount 方式。谢谢!

以上是关于Laravel count Eloquent belongsToMany 相关模型的主要内容,如果未能解决你的问题,请参考以下文章

laravel Builder scope count() 出错 Eloquent/Builder.php 1185行

Laravel Eloquent Multiple Where with count

Laravel Eloquent - distinct() 和 count() 不能一起正常工作

Laravel eloquent count 属于某一特定事件部门的参与者总数

Laravel - Eloquent 不要重复自己

Laravel Eloquent,按月/年分组