2010-06-09 4 views
0

J'essaie de vérifier si un résultat dans mon DQL est NULL.Vérifiez si le résultat de la doctrine hydratée est NULL

J'obtenu la requête DQL suivante:

$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; 

Maintenant, je veux vérifier si le s.aantal est NULL si je fais:

if(is_null($installedbase->Spare->spare_id)) 

lorsque la variable est tout NOT NULL fonctionne, mais quand il est en fait nULL je reçois un avis E message:

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

il ne voit qu'elle est nulle si parce que le cas la condition est exécutée.

Chose étrange, je fais exactement la même chose sur une autre page où cela ne pose aucun problème. Mais je dois faire quelque chose de mal ou de stupide puisque ces messages ne montrent généralement rien.

Est-ce que quelqu'un peut m'expliquer cela? :)

Répondre

0

Je ne suis vraiment pas familier avec DQL, mais vous pouvez étendre votre instruction if à;

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

ne fonctionne pas, malheureusement, qui ajoute juste un autre exactement le même avis :( – iggnition

+0

Backstep un plus - 'précédez is_object! ($ installedbase) || 'à l'instruction' if' – TheDeadMedic

+0

ne fonctionne pas non plus, je ne comprends vraiment pas pourquoi is_null ne fonctionnerait pas en premier lieu, ça marche bien sur une autre page:/ – iggnition

0

Que diriez-vous ....

if(isset($installedbase->Spare->spare_id)) { 
    if(is_null($installedbase->Spare->spare_id)) { 
    // do something 
    } 
} 

... ou peut-être essayer d'utiliser la fonction de get_object_vars PHP, quelque chose comme:

if(!empty(get_object_vars($installedbase->Spare)) && is_null($installedbase->Spare->spare_id)) { 
    // do something 
    } 

Ce que je ne suis pas si clair sur C'est comme ça que vous obtenez spare_id de s.aantal.

0

Est-il vraiment nécessaire de vérifier si c'est strictement null?

if ($q) ... 

devrait suffire dans la plupart des cas. Jetez un oeil à PHP type comparsion tables.

En outre, vous pouvez être intéressé par Doctrine_Null:

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

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

Si vous n'êtes pas laissé se joindre à i.Spare?

Alors:

$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; 

À moins spare_id n'est pas la clé primaire. Ensuite, peut-être changer l'instruction select à ce que je l'ai fait pourrait aider ensuite ajouter ceci à votre test:

if(isset($installedbase->Spare) && is_null($installedbase->Spare->spare_id)) 
Questions connexes