2016-12-01 21 views
1

我有3個實體的Symfony:查詢生成器先進的加入

[User] ---OneToMany---> [UserRole] ---ManyToOne---> [Role] 

因此存在一個連接表user_role

我想創建一個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

學說可以加入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');