簡體   English   中英

檢查水合理論結果是否為NULL

[英]Check if hydrated doctrine result is NULL

我正在嘗試檢查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

它確實看到它為空,因為執行了if條件。

奇怪的是,我正在另一頁上做完全相同的事情,它沒有問題。 但是我一定在做錯事或愚蠢的事,因為這些消息通常不會無所作為。

那么有人可以向我解釋嗎? :)

我真的不熟悉DQL,但是您可以將if語句擴展到;

if (!is_object($installedbase->Spare) || is_null($installedbase->Spare->spare_id))

怎么樣....

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的。

是否真的需要檢查它是否嚴格為空?

 if ($q) ...

在大多數情況下應該足夠了。 看一看PHP類型比較表

另外,您可能對Doctrine_Null感興趣:

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

    public function __toString()
    {
        return '';
    }
}

您是否不應該離開加入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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM