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();

Tags:

Php Example