Je veux récupérer les Users selon leurs rôles
Dans mon entité User
#[ORM\Column(type: 'json')]
private $roles = [];
Voici ce que j'ai fais dans mon controller qui ne marche pas
$users = $this->userRepository->findBy(
['roles' => 'ROLE_USER'],
['id' => 'DESC']
);
Puis j'ai tenté ma chance dans le repository
public function findAllUser(?array $roles)
{
if (!$roles) {
$query = $this->createQueryBuilder('u')
->orderBy('u.firstName', 'ASC')
;
return $query->getQuery()->getResult();
} else {
$query = $this->createQueryBuilder('u')
->andWhere('u.roles = :val')
->setParameter('val', $roles)
->orderBy('u.firstName', 'ASC')
;
return $query->getQuery()->getResult();
}
}
Chance je récupère tout les Users avec :
$users = $this->userRepository->findAllUser([]);
Malchance je ne recupere pas un User d'un role precis :
$users = $this->userRepository->findAllUser(['ROLE_ADMIN']);
Ce que je veux
Je souhaite récupérer les Users selon leurs rôles
Si tu veux récupérer les utilisateurs ayant un role précis, tu peux essayer ça :
public function findUsers(?string $role)
{
$query = $this->createQueryBuilder('u')
->orderBy('u.firstName', 'ASC')
if ($roles) {
$query->andWhere('u.roles LIKE :val')
->setParameter('val', '%'.$role.'%');
}
return $query->getQuery()->getResult();
}
Et l'appel de la méthode :
$users = $this->userRepository->findUsers('ROLE_ADMIN');
Note que j'ai remplacé le tableau par un string pour sélectionner sur un rôle, mais ça peut s'adapter si tu veux en spécifier plusieurs.
merci @gillesr
Voila ce que j'ai fais qui marche avant de voir ta reponse:
Dans mon UserRepository
public function findAllUser(?string $roles)
{
if (!$roles) {
$query = $this->createQueryBuilder('u')
->orderBy('u.firstName', 'ASC')
;
return $query->getQuery()->getResult();
}else {
$query = $this->createQueryBuilder('u')
->where('u.roles LIKE :val')
->setParameter('val', $roles)
->orderBy('u.firstName', 'ASC')
;
return $query->getQuery()->getResult();
}
}
Et dans le controller :
pour récupérer tout Users :
$users = $this->userRepository->findAllUser('');
pour récupérer les Users avec rôle [] en base qui est ROLE_USER dans mon cas
$users = $this->userRepository->findAllUser('[]');
pour récupérer les Users avec rôle ["ROLE_ADMIN"] en base qui est ROLE_ADMIN dans mon cas
$users = $this->userRepository->findAllUser('["ROLE_ADMIN"]');
Ce qui n'est pas loin de ce que tu me propose.
Cette facon de faire est aussi correcte? dis-moi