findBy с критериями JOIN в Symfony2

У меня 3 простых таблицы: user, role, user_x_role с отношением Many-to-Many. У меня есть 2 объекта: Пользователь и Роль. Пользовательский объект имеет свойство $ userRoles с аннотацией отношения. В контроллере мне нужно получить всех пользователей с определенной ролью. Но я не знаю, как использовать JOIN в контроллере. Текущий неправильный код:

$role = $this->getDoctrine()->getRepository('TestBackEndBundle:Role'); $roles = $role->findBy(array('name' => 'ROLE_PARTNER')); $user = $this->getDoctrine()->getRepository('TestBackEndBundle:User'); $partners = $user->findBy(array('userRoles' => $roles)); 

Он показывает «Неопределенный индекс: joinColumns in …». Но у меня есть joinColumns в User entity:

 /** * @ORM\ManyToMany(targetEntity="Role") * @ORM\JoinTable(name="user_x_role", * joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE", onUpdate="CASCADE")}, * inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id", onDelete="CASCADE", onUpdate="CASCADE")} * ) * @var ArrayCollection */ protected $userRoles; 

Related of "findBy с критериями JOIN в Symfony2"

ИМО – лучший способ для этого создать собственный репозиторий для объекта User. Затем в этом репозитории создайте такой метод, как «getUsersByRole», где вы делаете запрос, который вы хотите, с помощью построителя запросов.

  $qb = $this->getEntityManager()->createQueryBuilder(); $qb->select('u') ->from('\namespace\for\User', 'u') ->join('u.roles', 'r') ->where(...) return $qb->getQuery()->getResult();