FindBy with JOIN criteria in Symfony2

I have 3 simple tables: user, role, user_x_role with Many-to-Many relationship. I have 2 objects: User and Role. A user object has a $ userRoles property with a relationship annotation. In the controller, I need to get all users with a specific role. But I do not know how to use JOIN in the controller. Current invalid code:

$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));

It shows "Undefined index: joinColumns in ...". But I have joinColumns in the 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;
+5
source share
1 answer

IMO User. , "getUsersByRole", , , .

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

 return $qb->getQuery()->getResult();
+12

All Articles