检查水合学说结果是否为NULL

时间:2010-06-09 16:48:48

标签: php symfony1 doctrine dql

我正在尝试检查我的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条件。

奇怪的是我在另一个页面上做同样的事情,它没有问题。 但我必须做错事或愚蠢,因为这些消息通常不会显示任何内容。

那么有人可以向我解释一下吗? :)

4 个答案:

答案 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))