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でない場合はすべて機能しますが、実際にNULLの場合は、E通知メッセージが表示されます。

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

if条件が実行されるため、nullであることがわかります。

奇妙なことは、問題なく動作する別のページでまったく同じことをしていることです。しかし、それらのメッセージは一般的に何の役にも立たないので、私は何か間違ったことや愚かなことをしているに違いありません。

だから誰かが私にこれを説明できますか?:)

4

4 に答える 4

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))
于 2010-06-12T12:23:10.700 に答える
0

厳密にnullかどうかを確認する必要は本当にありますか?

 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

私は本当に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 に答える