0

在 SonataAdminBundle / SonataUserBundle 的上下文中,我使用查询生成器将静态过滤器添加到“列表”查询中:

使用此查询,我只获得“Juge”组中的用户,该查询运行良好:

$query
  ->leftJoin( $query->getRootAlias().'.groups', 'g')
  ->andWhere( 'g.name = :group_name' )
  ->setParameter('group_name', 'Juge'); 

在另一个 Admin 类中,我想做与此查询相反的操作:获取不在“Juge”组中的用户。我该怎么做?学说2中没有outerJoin函数对吗?

4

2 回答 2

2

I think you want to do

$query
  ->leftJoin( $query->getRootAlias().'.groups', 'g',
    Expr\Join::WITH, 'g.name = :group_name')
  ->where('g.name IS NULL')
  ->setParameter('group_name', 'Juge'); 

where Expr is Doctrine\ORM\Query\Expr.

于 2013-08-03T13:57:34.217 回答
1

我使用了以下代码,它对我有用,它是一种外连接。

$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();     
于 2014-02-17T01:12:45.390 回答