我正在尝试检查我的DQL中的结果是否为NULL。
我收到了以下DQL查询:
$q = self::createQuery("l")
->select('i.*, s.aantal, m.naam, c.cat_naam, a.app_id')
->from('InstalledBase i, i.Spare s, i.Apparaat a, a.Categorie c, a.Merk m')
->execute();
return $q;
现在我想检查s.aantal是否为NULL,所以我这样做:
if(is_null($installedbase->Spare->spare_id))
当变量为非null时,一切正常,但当它实际为NULL时,我收到一条E通知消息:
Notice: Trying to get property of non-object in \installedbase\templates\_index.php on line 29
它确实看到它为null,因为执行了if条件。
奇怪的是我在另一个页面上做同样的事情,它没有问题。 但我必须做错事或愚蠢,因为这些消息通常不会显示任何内容。
那么有人可以向我解释一下吗? :)
答案 0 :(得分:0)
我真的不熟悉DQL,但您可以将if
语句扩展为;
if (!is_object($installedbase->Spare) || is_null($installedbase->Spare->spare_id))
答案 1 :(得分:0)
怎么样......
if(isset($installedbase->Spare->spare_id)) {
if(is_null($installedbase->Spare->spare_id)) {
// do something
}
}
...或者尝试使用PHP get_object_vars函数,例如:
if(!empty(get_object_vars($installedbase->Spare)) && is_null($installedbase->Spare->spare_id)) {
// do something
}
我不太清楚你是如何从s.aantal获得spare_id的。
答案 2 :(得分:0)
是否真的需要检查它是否严格 null?
if ($q) ...
对大多数情况来说,应该足够了。看看PHP type comparsion tables。
另外,您可能对Doctrine_Null感兴趣:
final class Doctrine_Null
{
public function exists()
{
return false;
}
public function __toString()
{
return '';
}
}
答案 3 :(得分:0)
你是不是应该加入i.Spare?
所以:
$q = self::createQuery("l")
->select('i.*, s*, m.naam, c.cat_naam, a.app_id')
->from('InstalledBase i')
->leftJoin('i.Spare s')
->innerJoin('i.Apparaat a, a.Categorie c, a.Merk m')
->execute();
return $q;
除非spare_id不是主键。然后将select语句更改为我所做的可能会有所帮助,然后将其添加到您的测试中:
if(isset($installedbase->Spare) && is_null($installedbase->Spare->spare_id))