Список пользователей не принадлежит роли
Я использую пакет laravel spatie для пользовательских разрешений. Мне нужно перечислить всех пользователей, не принадлежащих конкретному пользователю. Например, перечислите всех пользователей, не являющихся администраторами (ролями).
Для перечисления всех администраторов я использовал
$users = App\User::role('admin');
Мне нужно прямо противоположное этому
2 ответа
Попробуйте так:
return $this->users()->whereHas('roles', function ($query) {
return $query->where('name','!=', 'admin');
})->first();
Вы можете сделать 2 запроса, чтобы получить обе группы пользователей, которые вам нужны. Я имею в виду:
1) Пользователи, у которых нет никакой роли.
User::whereDoesntHave('roles')->count()
2) Пользователи имеют любую роль, но не админ (из ответа Адама Козловского)
$this->users()->whereHas('roles', function ($query) {
$query->where('name','!=', 'admin');
})->first();
Как указано в документации, вы можете использовать:
$users = User::role('writer')->get(); // Returns only users with the role 'writer'
Область действия роли может принимать строку, объект \Spatie\Permission\Models\Role или объект \Illuminate\Support\Collection.
Просто поместите роли, которые вы хотите запросить в коллекции.