2016-12-01 7 views
1

에 합류 고급.심포니 : 쿼리 빌더 내가 <pre><code>[User] ---OneToMany---> [UserRole] ---ManyToOne---> [Role] </code></pre> <p>은 따라서 테이블 <code>user_role</code> 가입이 존재 3 개체</p>이

나는 반환하는 QueryBuilder을 만들려면 : 특정 역할 (모든 속성으로 식별 역할)가

모든 사용자.

many-to-many 관계로 조인을 처리해야하므로이 문제로 고생하고 있습니다. 순수한 SQL에서 쉽게,하지만 나는 이것을 위해 QueryBuilder를 촉진하지 못한다.

UserRole 엔티티에 직접 연결하지 못하면 링크 테이블 user_role을 포함하는 방법을 찾아야합니다.

나를 관리 할 사람이 있습니까? 모든 사용자가 반환되는,

->add('adm', 'entity', array(
      'class' => 'ZanderUserBundle:User', 
      'query_builder' => function(EntityRepository $r) { 
       $qb = $r->createQueryBuilder('u'); 
       $qb->join('ZanderUserBundle:Role', 'r')->where("r.role = 'ROLE_MANAGER'"); 

       return $qb; 
      }, 
      'label' => 'Manager', 
      'attr' => array(
       'class' => 'inputElement' 
     ))) 

결과는 다음과 같습니다

업데이트

이것은 내가 지금 무슨에서 발췌 한 것입니다.

+0

지금까지 시도한 것을 추가하여 질문을 업데이트하십시오. –

+0

doctrine이 many2many 관계에 참여할 수 있습니다. 오류로 시도한 내용을 표시하십시오. – Rawburner

답변

0

사용자 저장소 내에서 다음은 실행할 수이 결과를 얻으려면 :

$queryBuilder = $this->createQueryBuilder('u'); 
$queryBuilder->innerJoin('u.roles', 'r') 
      ->where('r.role = :role') 
      ->setParameter('role', 'ROLE_MANAGER'); 
$query = $queryBuilder->getQuery(); 
$users = $query->getResult(); 
0

가 알았어요!

$qb = $r->createQueryBuilder('u'); 
$qb->innerJoin('u.roles', 'r', 'WITH', 'r.role = :role') 
    ->setParameter('role', 'ROLE_MANAGER');