Doctrine 2 - 外连接查询

时间:2013-05-16 13:05:08

标签: sql symfony join doctrine-orm doctrine

在SonataAdminBundle / SonataUserBundle的上下文中,我正在使用查询构建器向“list”查询添加静态过滤器:

通过此查询,我只获得“Juge”组中的用户,查询效果很好:

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

在其他Admin类中,我想对此查询执行相反的操作:获取不在“Juge”组中的用户。我怎么能这样做?对于主义2中没有outerJoin函数吧?

2 个答案:

答案 0 :(得分:2)

我想你想做

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

其中ExprDoctrine\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();