Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2条令扩展&x27;不为空';_Symfony_Doctrine Orm - Fatal编程技术网

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的人来说,使用表达式基本上没有什么好处,我是在浪费时间(