Salut t'es toujours là ?
J'ai 2 tables
-Users : id, nom
-Roles: id, nom
Ces deux tables ont une relation many to many avec la table pivot
-Role_user : role_id, user_id
Comment puis-je regrouper tous les utilisateurs par nom de rôle ?
J'ai essayé ceci
mais il semble que cela ne fonctionne que pour les relations de type "un à plusieurs".
14 réponses
Salut, il faut que tu penses dans l'autre sens
Est-ce que ça pourait regrouper les utilisateurs comme ça :
ou dans la collection "ADMIN" j'ai tous les utilisateurs qui sont admin et dans "USER" les utilisateurs qui sont de simple utilisateur
Oui, c'est possible en faisant
Ça marche mais cette maniere de faire ne va pas m'aider pour la suite car j'aurais besoin d'utiliser les relations qui appartienne au model user pour faire de requete dessus. Donc y'aurais pas un moyen de partir du sens de User ?
Parce-que de base voila à quoi ressemble ma requete
Est-il possible de faire ca dans le sens inverse ?
J'ai pas testé, mais quelque chose du genre devrait sûrement fonctionner. Deplus, si tu es sur les dernières versions de Laravel, tu peux remplacer ton whereHas par un whereRelation comme j'ai mis dans l'exemple.
J'ai eu cette erreur
J'ai remplace ce bout de code
par ca
Et ca l'air de fonctionner sauf que pour chaque role il y'a qu'un seul utilisateur
A la place de
Là ca fait que prendre le role associe au premier utilisateur c'etait mieux avec ca
J'ai testé avec ta methode
$roles = Role::with(['users.attribution'])->get()->pluck('users', 'name')
Et c'est bien ce que je veux mais y'a tous les roles qui sont listés alors que moi je voudrais seulement les roles qui appartiennent au moins à un utilisateurs. Comment porrais-je faire ça ? Merci d'avance
Re j'ai trouvé la solution en faisant
Salut,
Pour avoir que les rôles qui ont des utilisateurs, tu peux ajouter ->filter(static fn(Role $role) => $role->users->isNotEmpty() qui va garder que les rôles qui ont des utiisateurs liés