0

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

当变量不为空时,一切正常,但当它实际上为空时,我收到一条 E 通知消息:

Notice: Trying to get property of non-object in \installedbase\templates\_index.php on line 29

它确实看到它为空,因为执行了 if 条件。

奇怪的是,我在另一个没有问题的页面上做同样的事情。但我一定是做错了什么或愚蠢的,因为这些消息通常不会一无所获。

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

4

4 回答 4

0

我真的不熟悉 DQL,但您可以将您的if陈述扩展到;

if (!is_object($installedbase->Spare) || is_null($installedbase->Spare->spare_id))
于 2010-06-09T16:57:10.210 回答
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 获得备用 ID。

于 2010-06-09T18:45:49.430 回答
0

是否真的需要检查它是否严格为空?

 if ($q) ...

对于大多数情况应该足够了。看看PHP 类型比较表

此外,您可能对 Doctrine_Null 感兴趣:

final class Doctrine_Null
{ 
    public function exists()
    {
        return false;    
    }

    public function __toString()
    {
        return '';
    }
}
于 2010-06-09T20:17:02.177 回答
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 不是主键。然后也许将选择语句更改为我所做的可能会有所帮助,然后将其添加到您的测试中:

if(isset($installedbase->Spare) && is_null($installedbase->Spare->spare_id))
于 2010-06-12T12:23:10.700 回答