2016-12-01 55 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');