Reputation: 2303
I'm using the FormType for an Entity of mine, and setting up an entity field.
I need two Where
clauses in an And
, and from what I've read on the Query Builder page, this is at least how I should go about it:
'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;
},
However, the not(eq('col', 'NULL'))
doesn't achieve the desired result, and in fact, errors with:
Error: Expected Literal, got 'NULL'
Upvotes: 39
Views: 68882
Reputation: 518
You can use the QueryBuilder to find the results,
$query=$this->dm->createQueryBuilder('AppBundle:DocumentName')
->field('fieldName')->notEqual(null);
$data=$query->getQuery()->execute();
Upvotes: 0
Reputation: 2811
You can also use DQL in your queryBuilder, which is much less ugly IMO.
Quick and dirty example from a controller:
$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()
;
Easier to read in my estimation.
Upvotes: 42