Проверьте, если результат гидратированной доктрины равен NULL - PullRequest
0 голосов
/ 09 июня 2010

Я пытаюсь проверить, равен ли результат в моем DQL нулю.

Я получил следующий запрос 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 ]

0 голосов
/ 12 июня 2010

Разве вы не должны присоединиться к 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))
0 голосов
/ 09 июня 2010

Как насчет ....

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
  }

Что мне не совсем понятно, так это то, как вы получаете spare_id от s.aantal.

0 голосов
/ 10 июня 2010

Действительно ли нужно проверить, строго ли это null?

 if ($q) ...

должно быть достаточно для большинства случаев. Взгляните на таблицы сравнения типов PHP .

Также вас может заинтересовать Doctrine_Null:

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

    public function __toString()
    {
        return '';
    }
}
0 голосов
/ 09 июня 2010

Я действительно не знаком с DQL, но вы можете расширить свой оператор if до;

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