0

In the context of the SonataAdminBundle / SonataUserBundle, I'm using the query builder to add static filters to the "list" query :

With this query, I get only users in the group "Juge", the query works well :

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

In an other Admin class, i want to do the oposite of this query : get the users who ARE NOT in the "Juge" group. How can I perform this? There is not outerJoin function in doctrine 2 right?

Yvan L.
  • 162
  • 4
  • 15

2 Answers2

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.

IluTov
  • 6,807
  • 6
  • 41
  • 103
dMaggot
  • 81
  • 1
  • 6
  • This doesnt work for users who are in the Juge group and at least another group. Still looking for the correct answer. – viarnes Mar 10 '15 at 05:21
1

I used the following code and it works for me, its a kind of Outer Join.

$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();     
Saman
  • 5,044
  • 3
  • 28
  • 27