Symfony:Query Builder高级加入

时间:2016-12-01 14:30:21

标签: php symfony doctrine-orm query-builder

我有3个实体

[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'
        )))

结果是,返回所有用户。

2 个答案:

答案 0 :(得分:0)

要获得此结果,您可以在用户存储库中执行以下操作:

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

答案 1 :(得分:0)

知道了!

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