如何从组模型中获取具有特定角色的所有用户

How to get all Users with a specific Role from a Group model

我有一个 GroupUser 具有多对多关系。每个用户可以有多个角色,我用 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;

这完全取决于您打算使用此方法做什么。