2012-09-04 35 views
5

我有3個簡單的表:user,role,user_x_role和Many-to-Many關係。我有兩個實體:用戶和角色。用戶實體具有帶關係註釋的$ userRoles屬性。在控制器中,我需要獲取具有特定角色的所有用戶。但我不知道如何在控制器中使用JOIN。當前錯誤代碼:在Symfony2中有JOIN條件的findBy

$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 thows「Undefined index:joinColumns in ...」。但是我對用戶的實體joinColumns:

/** 
* @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; 

回答

12

IMO它最好的方法是創建自己的用戶庫的實體。然後在該存儲庫中創建類似「getUsersByRole」的方法,您可以在其中使用查詢構建器進行查詢。

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

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