我有两个表'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
请帮助
答案 0 :(得分:0)
如果您已在组模型中建立关系,例如
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();
在文档中的Relationships和Collections上阅读
您还可以使用mutatus / accessor将成员数作为模型的属性返回,因此在您的组模型中
getGroupMemberCountAttribute() {
return $this->group_members()->count();
}
并像
一样使用它$group->group_member_count;