Список пользователей не принадлежит роли

Я использую пакет 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.

Просто поместите роли, которые вы хотите запросить в коллекции.

Другие вопросы по тегам