queryBuilder上的Doctrine2空参数

时间:2016-12-21 17:36:14

标签: symfony doctrine-orm dql

我正在尝试检查是否设置了用户电子邮件。我能够获得设置为NULL的那些但我缺少那些有空字符串作为值的那些。这是我的尝试:

$user = $this->createQueryBuilder('u')
        ->where('(u.email IS NULL OR u.email = :empty)')
        ->setParameter('empty', "''")
        ->getQuery()->getResult()
;

我收到NULL电子邮件没有问题,但我没有收到空字符串电子邮件。有没有办法实现这一点,还是DQL不支持?

2 个答案:

答案 0 :(得分:1)

这个怎么样(编辑#2):

$user = $this->createQueryBuilder('u')
        ->where('u.email = NULL')
        ->orWhere('u.email = \'\'')
        ->getQuery()->getResult()
;

这有用吗?

答案 1 :(得分:0)

值得一提的是Expr Helper from QueryBuilder为此提供了一个功能:

// Example - $qb->expr()->isNull('u.id') => u.id IS NULL
public function isNull($x); // Returns string

因此,对于您的情况,您可以执行以下操作:

$qb = $this->createQueryBuilder('u');

$qb
   ->where(
       $qb->expr()->orX(
           $qb->expr()->isNull('u.email'),
           $qb->expr()->eq('u.email', ':empty'),
       )
   )
   ->setParameter('empty', '""');

$users = $qb->getQuery()->getResult();