Laravel:如何让所有具有特定角色的用户使用?

时间:2019-08-28 13:49:58

标签: php laravel laravel-6

我有三个角色:1. if (gender == 1) maxHeartRate = 209 - (0.7 * ageInYears); else maxHeartRate = 214 - (0.8 * ageInYears); System.out.println(String.format("Your max heart rate is %s beats per minute.",maxHeartRate)); 2. Admin 3. Client

我有三个表:1. Store 2. users 3。roles

我如何获得所有具有role_user角色的用户?

我尝试过

Client

我遇到以下错误。

  

不应调用非静态方法App \ Models \ User :: roles()   静态地

角色模型

$clients = User::roles()->where('App\Models\Role',Role::CLIENT)->get();

用户模型

class Role extends Model
{
    public const ADMIN = 'Admin';
    public const CLIENT = 'Client';
    public const STORE = 'Store';

    public function users()
    {
        return $this->belongsToMany('App\Models\User')->using('App\Models\UserRole');
    }
}

2 个答案:

答案 0 :(得分:4)

您可以使用whereHas()方法进行操作。这是在查询中使用exists限制关系的一种方式

$clients = User::whereHas('roles', function($role) {
    $role->where('name', '=', Role::CLIENT);
})->get();

如果您也想获得该角色,请堆叠with()方法

$clients = User::whereHas('roles', function($role) {
    $role->where('name', '=', Role::CLIENT);
})->with(['roles' => function($role) {
    $role->where('name', '=', Role::CLIENT);
}])->get();

答案 1 :(得分:3)

那是因为您试图调用Model类而不是实例上的roles方法,这就是应该的方法

$clients = Role::whereName('client')->first()->users;