2010-06-09 116 views
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)) 

當變量不是空一切正常,但是當它實際上是NULL我得到一個è通知消息:

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

它看到,它是空雖然因爲如果條件被執行。

奇怪的是,我正在做另一個頁面上完全相同的東西,它的工作原理沒有問題。 但是我必須做些錯誤或愚蠢的事情,因爲這些消息通常不會毫無意義。

那麼有人可以向我解釋這一點嗎? :)

回答

0

我真的不熟悉DQL,但您可以擴展您的if聲明;

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

不黯然工作,只是增加了一個一模一樣的通知:( – iggnition 2010-06-09 17:10:04

+0

後退前進另外一個問題 - 在前面加上'is_object! ($ installedbase)||'到if語句 – TheDeadMedic 2010-06-09 17:20:08

+0

也不能工作,我真的不明白爲什麼is_null不會在第一個地方工作,它在另一個頁面上工作正常:/ – iggnition 2010-06-09 17:44:13

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。

0

是否真的需要檢查是否是嚴格 null?

if ($q) ... 

對於大多數情況應該足夠了。看看PHP type comparsion tables

此外,您可以在Doctrine_Null感興趣:

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

    public function __toString() 
    { 
     return ''; 
    } 
} 
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))