Depuis mon contrôleur, je voudrais sélectionner tous les utilisateurs qui ont le rôle "client".Comment sélectionner les utilisateurs en fonction du rôle qu'ils ont dans Laravel 5?
J'ai un modèle d'utilisateur et un modèle de rôle. Un rôle appartient à plusieurs utilisateurs et un utilisateur appartient à plusieurs rôles.
J'ai créé mes modèles et ont des fonctions d'aide au niveau de l'instance de modèle pour aller chercher les rôles et les utilisateurs
Voici les modèles de l'utilisateur et la base de données Rôle:
app/User.php
class User extends Authenticatable
{
use Notifiable;
protected $fillable = [
'name', 'email', 'password',
];
protected $hidden = [
'password', 'remember_token',
];
// User belongs to many roles
public function roles()
{
return $this->belongsToMany('App\Role')->withTimestamps();
}
// whitelist specific roles
// reject if user does not have given roles
public function authorizeRoles($roles)
{
if ($this->hasAnyRole($roles)) {
return true;
}
abort(401, 'This action is unauthorized.');
}
// Check if a user has a role
public function hasRole($role)
{
if ($this->roles()->where('name', $role)->first())
{
return true;
}
return false;
}
// Pass in string or array to check if the user has a role
public function hasAnyRole($roles)
{
if (is_array($roles)) {
foreach ($roles as $role) {
if ($this->hasRole($role)) {
return true;
}
}
} else {
if ($this->hasRole($roles)) {
return true;
}
}
return false;
}
}
app/Role.php:
class Role extends Model
{
public function users()
{
return $this->belongsToMany('App\User')->withTimestamps();
}
}
J'ai migrations pour un create_users_table, create_roles_table et un tableau croisé dynamique pour create_role_user_table. Chaque rôle a un identifiant, un nom et une description. Chaque utilisateur a un identifiant, un nom, un email et un mot de passe.
Je voudrais filtrer par tous les utilisateurs qui ont le rôle appelé "client".
Dans ma méthode du contrôleur j'essaie d'appeler des rôles mais il ne fonctionne pas parce qu'il est une méthode d'instance:
// Display admin dashboard
public function admin(Request $request)
{
// check to make sure user is an admin
$request->user()->authorizeRoles('admin');
// Display all users that have the role "client"
// ***** section that does not work ********
$users = User::all()->roles()->where('name', 'client')->get();
return view('admin', compact('users'));
}
Comment puis-je remplir la variable $users
avec uniquement les utilisateurs qui ont le rôle avec le nom « client "?
Essayez d'aller l'autre sens. Obtenir tous les rôles où le nom est client, puis obtenir tous les utilisateurs qui correspondent. – aynber
Vous pouvez également consulter les documents de Laravel à propos de [querying relations] (https://laravel.com/docs/master/eloquent-relationships#querying-relations), voir si l'une de ces méthodes fonctionne pour vous. – aynber