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