J'utilise le FormType pour une entité à moi, et la configuration un champ d'entité . J'ai besoin de deux clauses Where
dans un And
, et d'après ce que j'ai lu la page Query Builder , voici au moins comment je dois procéder:
'query_builder' => function ($er){
$qb = $er->createQueryBuilder('p');
$qb
->where($qb->expr()->andx(
$qb->expr()->in('p', '?1'),
$qb->expr()->not(
$qb->expr()->eq('p.location', 'NULL')
)
))
->setParameter(1, $this->totalScope)
;
return $qb;
},
Cependant, la not(eq('col', 'NULL'))
n'atteint pas le résultat souhaité, et en fait, des erreurs avec:
Erreur: littéral attendu, obtenu "NULL"
Vous pouvez utiliser isNotNull
:
'query_builder' => function ($er){
$qb = $er->createQueryBuilder('p');
$qb
->where($qb->expr()->andx(
$qb->expr()->in('p', '?1'),
$qb->expr()->isNotNull('p.location')
))
->setParameter(1, $this->totalScope);
return $qb;
},
Vous pouvez également utiliser DQL dans votre queryBuilder, ce qui est beaucoup moins laid IMO.
Exemple rapide et sale d'un contrôleur:
$repo = $this->getDoctrine()->getRepository('AcmeBundle:Transaction');
$query = $repo->createQueryBuilder('t')
->where('t.timestamp > :timestamp')
->andWhere('t.pinNumber IS NOT NULL')
->setParameter('timestamp', new \DateTime('1 day ago'))
->getQuery()
;
Plus facile à lire à mon avis.