Symfony2条令扩展&x27;不为空';
我将表单类型用于我的实体,并设置一个。 我需要在Symfony2条令扩展&x27;不为空';,symfony,doctrine-orm,Symfony,Doctrine Orm,我将表单类型用于我的实体,并设置一个。 我需要在和中使用两个Where子句,从我读到的内容来看,至少我应该这样做: 'query_builder' => function ($er){ $qb = $er->createQueryBuilder('p'); $qb ->where($qb->expr()->andx( $qb->expr()->in('p', '?1'), $
和中使用两个Where
子句,从我读到的内容来看,至少我应该这样做:
'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'))
没有达到预期的结果,事实上,错误如下:
错误:应为文本,得到“NULL”
您可以使用:
'query\u builder'=>函数($er){
$qb=$er->createQueryBuilder('p');
$qb
->其中($qb->expr()->andx(
$qb->expr()->in('p','1'),
$qb->expr()->isNotNull('p.location')
))
->setParameter(1,$this->totalScope);
返回$qb;
},
您还可以在queryBuilder中使用DQL,这在我看来要简单得多
来自控制器的快速脏示例:
$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()
;
在我的估算中更容易阅读。您可以使用QueryBuilder查找结果
$query=$this->dm->createQueryBuilder('AppBundle:DocumentName')
->field('fieldName')->notEqual(null);
$data=$query->getQuery()->execute();
对于了解SQL的人来说,主观上它可能不那么难看,但它的可移植性也不太好,而表达式则将数据库层完全抽象掉。我个人总是使用这些表达式。@MarcelBurkhard isNotNull方法:公共函数isNotNull($x){return$x。'IS NOT NULL';}
此外,IS NOT NULL
是DQL NOT SQL,这使得它可以移植,但也不那么难看。:)有趣的是,对于了解SQL的人来说,使用表达式基本上没有什么好处,我是在浪费时间(