Подтвердить что ты не робот

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'

4b9b3361

Ответ 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()
;

Легче читать в моей оценке.