我有3个实体
[User] ---OneToMany---> [UserRole] ---ManyToOne---> [Role]
因此存在联接表user_role
。
我想创建一个QueryBuilder
,返回:
具有特定角色的所有用户(由任何属性标识的角色)。
我为此奋斗,因为我必须处理many-to-many
关系的联接。在纯SQL中很容易,但我没有为此提供方便的QueryBuilder。
直接加入User
和Role
实体失败,我必须找到一种方法来包含链接表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)
要获得此结果,您可以在用户存储库中执行以下操作:
$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');