Неявные объединения и Где в Доктрине – как?

У меня есть отношение ManyToMany от пользователей и ролей. То есть у меня есть таблица пользователя и класс сущности, таблица ролей и сущность и таблица объединения user_role width_ user_id и role_id.

Теперь я недавно попытался получить пользователей с их ролями, используя объединения, например:

$qb = $this->createQueryBuilder('u') ->join('user_role', 'ur', Join::ON, "I didn't know what to put here, nothing worked ") 

Во всяком случае, благодаря этому ответу я добавил правильное сопоставление (аннотации) к моим обеим классам сущностей, а затем удалил свое собственное соединение, позволяя Doctrine выполнять работу:

 $qb = $this->createQueryBuilder('u'); $q = $qb->getQuery(); $users = $q->getResult(); 

И это работает. У меня есть список всех пользователей, а затем я могу получить доступ к их ролям (благодаря методу User-> getRoles ()).

Однако теперь я хочу указать только пользователей, имеющих определенные роли, например «ROLE_ADMIN», и я понятия не имею, как это сделать:

 $qb = $this->createQueryBuilder('u') >where('what_to_put_here = :roles') ->setParameter('roles', 'what_to_put_here') 

Кстати, код SQL, созданный Doctrine, выглядит так:

 SELECT u0_.id AS id_0, u0_.username AS username_1, u0_.personal_name AS personal_name_2, u0_.password AS password_3, u0_.email AS email_4, u0_.is_active AS is_active_5 FROM user u0_ 

Таким образом, нет ПРИСОЕДИНЕНИЯ. Из документов Doctrine я знаю, что это называется «ленивой нагрузкой» – роли определенного пользователя будут получены по требованию.

Но тогда, как я могу сделать что-то вроде этого:

 SELECT * FROM `user` JOIN user_role on user_role.user_id = user.id JOIN role on role.id = user_role.role_id WHERE role.role_name = 'ROLE_ADMIN' 

?