Question Symfony2 Doctrine Expr 'N'EST PAS NULL'


J'utilise le type de formulaire pour une entité du mien, et en configurant un champ d'entité. J'ai besoin de deux clauses Where dans un And, et d'après ce que j'ai lu la page Query Builder, c’est du moins comment je dois y aller:

'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;
},

Cependant, le not(eq('col', 'NULL')) n'atteint pas le résultat souhaité (et en fait, les erreurs avec "Erreur: littéral attendu, obtenu 'NULL'"


27
2018-04-02 20:23


origine


Réponses:


Vous pouvez utiliser 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;
},

41
2018-04-03 07:37



Vous pouvez également utiliser DQL dans votre queryBuilder, ce qui est beaucoup moins laid IMO.

Exemple rapide et sale d'un contrôleur:

$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()
;

Plus facile à lire dans mon estimation.


28
2018-03-21 13:53