У меня 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;
ИМО – лучший способ для этого создать собственный репозиторий для объекта User. Затем в этом репозитории создайте такой метод, как «getUsersByRole», где вы делаете запрос, который вы хотите, с помощью построителя запросов.
$qb = $this->getEntityManager()->createQueryBuilder(); $qb->select('u') ->from('\namespace\for\User', 'u') ->join('u.roles', 'r') ->where(...) return $qb->getQuery()->getResult();