37

我将FormType用于我的实体,并设置了一个实体字段。我需要两个Where子句And,并且从我在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'))并没有达到预期的结果,事实上,错误:

错误:预期文字,得到 'NULL'

4

3 回答 3

54

您可以使用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;
},
于 2013-04-03T07:37:55.757 回答
42

您还可以在您的 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()
;

我估计更容易阅读。

于 2014-03-21T13:53:38.017 回答
0

您可以使用 QueryBuilder 来查找结果,

 $query=$this->dm->createQueryBuilder('AppBundle:DocumentName')
                 ->field('fieldName')->notEqual(null);

 $data=$query->getQuery()->execute();
于 2019-11-25T12:24:09.883 回答