2012-09-04 7 views
5

나는 many-to-many 관계가있는 user, role, user_x_role의 3 개의 간단한 테이블을 가지고 있습니다. 2 개의 엔티티가 있습니다 : 사용자 및 역할. 사용자 엔티티에는 relation 주석이있는 $ 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)); 

"정의되지 않은 색인 : joinColumns in ..."입니다. 하지만 나는 사용자 엔티티에 컬럼을 결합했습니다.

/** 
* @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(); 
관련 문제