Laravel 使用连接查询获取所有组以及每个组的组成员数
Laravel get all groups along with the count of each groups group members using join query
我有两个 tables 'Group'('id', 'title', 'description') 和 'Group_members'('id' , 'group_id', 'user_id').每当用户加入组时,都会在 'group_members' table.
中创建一行
我需要的是获取所有组以及每个组中的成员数量,
像这样的东西:-
[
{
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();
哪个returns错误
SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在 group
.id
= group_members
.`group_id[=16 附近使用的正确语法=]
请帮忙
如果您在群组模型中建立了关系,例如
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 and Collections
您还可以使用 mutatus/accessor 来 return 成员计数作为模型的 属性 因此在您的群组模型中
getGroupMemberCountAttribute() {
return $this->group_members()->count();
}
并像
一样使用它
$group->group_member_count;
我有两个 tables 'Group'('id', 'title', 'description') 和 'Group_members'('id' , 'group_id', 'user_id').每当用户加入组时,都会在 'group_members' table.
中创建一行我需要的是获取所有组以及每个组中的成员数量, 像这样的东西:-
[
{
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();
哪个returns错误
SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在 group
.id
= group_members
.`group_id[=16 附近使用的正确语法=]
请帮忙
如果您在群组模型中建立了关系,例如
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 and Collections
您还可以使用 mutatus/accessor 来 return 成员计数作为模型的 属性 因此在您的群组模型中
getGroupMemberCountAttribute() {
return $this->group_members()->count();
}
并像
一样使用它$group->group_member_count;