繁体   English   中英

Laravel使用连接查询获取所有组以及每个组的成员数

[英]Laravel get all groups along with the count of each groups group members using join query

我有两个表'Group'('id','title','description')和'Group_members'('id','group_id','user_id')。 每当用户加入组时,都会在“ group_members”表中创建一行。

我需要获取所有组以及每个组中的成员数,例如:

[
    {
        id: 1
        title: group1
        description: lorem ipsum
        member_count: 5
    }{
        id: 2
        title: group2
        description: lorem ipsum
        member_count: 7
    }
]

到目前为止,我所做的是

    DB::table('group')
        ->join('group_members', 
        function($join){
            $join->on('group_members.group_id', '=', 'group.id')
            ->distinct()->pluck('group_members.user_id')->count();
        })
        ->get();

返回错误

SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册,以获取正确的语法以在“附近” group id = group_members .`group_id

请帮忙

如果您在小组模型中建立了关系,例如

public function group_members()
{
    return $this->hasMany('App\GroupMember');
}

在GroupMember模型中

public function group()
{
    return $this->belongsTo('App\Group');
}

你应该能够做

$groups = Group::all();

foreach ($groups as $group) {
    $group->member_count = $group->group_members()->count();
}

$groupsArray = $groups->toArray();

要么

$group = Group::where('column', 'value')->with('group_members')->first();
$count = $group->group_members->count();

在文档中阅读有关关系集合的信息


您还可以使用mutatus / accessor作为模型的属性返回成员数,因此在您的组模型中

getGroupMemberCountAttribute() {
    return $this->group_members()->count();
}

并像这样使用

$group->group_member_count;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM