由于其他(旧)的问题没有得到适当的答案,我会再次尝试:结合IS NULL和:在学说2 DQL值
我经常跨场景,在这里我要查询的到来实体与特定值:
$query = $em->createQuery('SELECT e FROM Entity e WHERE e.parent = :parent');
$query->setParameter('parent', $parent);
通常情况下,这个值可以是NULL,但WHERE e.parent = NULL
产生没有结果,迫使我破解身边这样的:
if ($parent === null) {
$query = $em->createQuery('SELECT e FROM Entity e WHERE e.parent IS NULL');
}
else {
$query = $em->createQuery('SELECT e FROM Entity e WHERE e.parent = :parent');
$query->setParameter('parent', $parent);
}
虽然我明白老鼠在SQL/DQL中,NULL!= NULL,实际情况是,在这种情况下结果确实令人讨厌。
另外,在旧的问题中给出的示例在DQL中不起作用,因为NULL!= NULL。
->setParameter('parent', (is_null($parent) ? "NULL" : $parent));
我也试过这种方式,什么好心的人提供的,但是这会给出一个NonUniqueResult例外,因为当父母为1为例,它会给双重结果。
SELECT e
FROM Entity e
WHERE (e.parent = :parent OR e.parent IS NULL)
有没有执行此查询一个更清洁的方式,当参数可以为空?
其实我想这也是一个,因为它是有道理的。 Unfornately它给了我一个NonUniqueResult异常,因为当我的参数不为null时它会给我2个结果。或者我错过了什么? – Matheno 2015-02-09 09:13:37