Symfony2 Doctrine Expr 'IS NOT NULL'
Я использую FormType для моей сущности и настраиваю поле сущности. Мне нужно два предложения Where
в And
, и из того, что я прочитал на странице Query Builder, по крайней мере, я должен это сделать:
'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;
},
Тем not(eq('col', 'NULL'))
менее, not(eq('col', 'NULL'))
не достигает желаемого результата, и на самом деле ошибки с:
Ошибка: ожидаемый литерал, получил 'NULL'
Ответы
Ответ 1
Вы можете использовать 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;
},
Ответ 2
Вы также можете использовать DQL в своем queryBuilder, который намного менее уродливый IMO.
Быстрый и грязный пример с контроллера:
$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()
;
Легче читать в моей оценке.