在SonataAdminBundle / SonataUserBundle的上下文中,我正在使用查询构建器向“list”查询添加静态过滤器:
通过此查询,我只获得“Juge”组中的用户,查询效果很好:
$query
->leftJoin( $query->getRootAlias().'.groups', 'g')
->andWhere( 'g.name = :group_name' )
->setParameter('group_name', 'Juge');
在其他Admin类中,我想对此查询执行相反的操作:获取不在“Juge”组中的用户。我怎么能这样做?对于主义2中没有outerJoin函数吧?
答案 0 :(得分:2)
我想你想做
$query
->leftJoin( $query->getRootAlias().'.groups', 'g',
Expr\Join::WITH, 'g.name = :group_name')
->where('g.name IS NULL')
->setParameter('group_name', 'Juge');
其中Expr
为Doctrine\ORM\Query\Expr
。
答案 1 :(得分:0)
我使用了以下代码,它适用于我,它是一种外部加入。
$qb = $this->getEntityManager()->createQueryBuilder()
->select('u')
->from('UserBundle:User', 'u')
->leftJoin('u.group g WITH g.id = :groupId', false)
->where('g IS NULL')
->groupBy('u.id')
->setParameter('groupId', 12)
return $qb->getQuery()->getResult();