我正在使用FormType作为我的实体,并设置entity field。 我需要在And中使用两个Where子句,并且从我在the Query Builder page上看到的内容,这至少是我应该如何去做的:
'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'))
没有达到预期的结果(事实上,错误“错误:预期的文字,得到'空''”
答案 0 :(得分:51)
您可以使用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;
},
答案 1 :(得分:34)
你也可以在queryBuilder中使用DQL,它更像是丑陋的 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()
;
我估计更容易阅读。
答案 2 :(得分:0)
您可以使用QueryBuilder查找结果,
$query=$this->dm->createQueryBuilder('AppBundle:DocumentName')
->field('fieldName')->notEqual(null);
$data=$query->getQuery()->execute();