我正在尝试检查是否设置了用户电子邮件。我能够获得设置为NULL的那些但我缺少那些有空字符串作为值的那些。这是我的尝试:
$user = $this->createQueryBuilder('u')
->where('(u.email IS NULL OR u.email = :empty)')
->setParameter('empty', "''")
->getQuery()->getResult()
;
我收到NULL电子邮件没有问题,但我没有收到空字符串电子邮件。有没有办法实现这一点,还是DQL不支持?
答案 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();