user other than specific role laravel spatie code example
Example 1: get users of specific role laravel role spatie
$users = User::role('writer')->get();
Example 2: get users other than specific role laravel role spatie
User::query()->whereHas("roles", function($q){ $q->whereNotIn("name", ["superadmin"]); })
Example 3: user other than specific role laravel spatie
Add this to your user model:
public function scopeNotRole(Builder $query, $roles, $guard = null): Builder
{
if ($roles instanceof Collection) {
$roles = $roles->all();
}
if (! is_array($roles)) {
$roles = [$roles];
}
$roles = array_map(function ($role) use ($guard) {
if ($role instanceof Role) {
return $role;
}
$method = is_numeric($role) ? 'findById' : 'findByName';
$guard = $guard ?: $this->getDefaultGuardName();
return $this->getRoleClass()->{$method}($role, $guard);
}, $roles);
return $query->whereHas('roles', function ($query) use ($roles) {
$query->where(function ($query) use ($roles) {
foreach ($roles as $role) {
$query->where(config('permission.table_names.roles').'.id', '!=' , $role->id);
}
});
});
}
You can use it like this:
$users = User::notRole('Admin')->get();
$users = User::notRole(['Admin', 'Super Admin'])->get();