如何从组模型中获取具有特定角色的所有用户
How to get all Users with a specific Role from a Group model
我有一个 Group
与 User
具有多对多关系。每个用户可以有多个角色,我用 spatie/larevel-permission
实现
我正在尝试检索附加到具有特定角色的组的所有用户,例如learner
这是我目前所拥有的:
class Group extends Model
{
// other code
//
public function learners(){
return $this->users::whereHas('roles', function($q) {
$q->where('name', 'learner');
})->get();
}
// other code
public function users() {
return $this->belongsToMany(User::class)->withTimestamps();
}
}
我得到错误:
Illuminate\Database\Eloquent\Collection::whereHas does not exist
我明白 $this->users
returns 和 Collection
,这就是我收到该错误消息的原因。但我不确定我还能如何 获得具有 'learner' 角色的组的用户 。
您应该调用 users()
关系方法 returns Belongs To Many 关系而不是动态 属性 users
returns 结果关系(集合)的查询。您也可以使 learners
方法本身成为关系方法,而不是直接返回结果:
public function learners()
{
return $this->users()
->whereHas('roles', fn ($q) => $q->where('name', 'learner'));
}
$group->learners;
这完全取决于您打算使用此方法做什么。
我有一个 Group
与 User
具有多对多关系。每个用户可以有多个角色,我用 spatie/larevel-permission
我正在尝试检索附加到具有特定角色的组的所有用户,例如learner
这是我目前所拥有的:
class Group extends Model
{
// other code
//
public function learners(){
return $this->users::whereHas('roles', function($q) {
$q->where('name', 'learner');
})->get();
}
// other code
public function users() {
return $this->belongsToMany(User::class)->withTimestamps();
}
}
我得到错误:
Illuminate\Database\Eloquent\Collection::whereHas does not exist
我明白 $this->users
returns 和 Collection
,这就是我收到该错误消息的原因。但我不确定我还能如何 获得具有 'learner' 角色的组的用户 。
您应该调用 users()
关系方法 returns Belongs To Many 关系而不是动态 属性 users
returns 结果关系(集合)的查询。您也可以使 learners
方法本身成为关系方法,而不是直接返回结果:
public function learners()
{
return $this->users()
->whereHas('roles', fn ($q) => $q->where('name', 'learner'));
}
$group->learners;
这完全取决于您打算使用此方法做什么。