У меня есть класс foo
что принадлежит bar
,
в foo
Я имею:
public function bar(){
return $this->belongsTo('App\Models\Bar');
}
У меня есть объект $foo
кто bar_id
является null
,
В Foo
У меня есть if ifment:
if ($this->bar->id == 1){ echo "in if"; }
Не удивительно, что я получаю Trying to get property of non-object
ошибка. Поэтому я добавил вызов isset
, Но теперь код внутри if никогда не оценивается, потому что if всегда ложно. Мой новый if выглядит так:
if(isset($this->bar) && $this->bar->id == 1){ echo "in if"; }
После настройки bar_id
Я все еще не собираюсь в if
, Когда я пытаюсь print bar_id
Я вижу, что значение не является нулевым. Почему я не собираюсь в это, если?
Вы можете сделать более безопасную проверку:
if($this->bar instanceof \App\Models\Bar) {
echo 'in if';
}
Это проверит, если bar
свойство устанавливается и создается соответствующее отношение.
Я наконец-то понял. По-видимому isset
не вызывает динамическую функцию, что означает, что значение не загружается, что означает, что оно все еще null
, Чтобы обойти это, я сделал следующее:
$bar = $this->bar();
if (isset($this-> bar) && $this->bar->id == 1) { echo "in if"; }
Так как я вызываю $ this-> bar (), прежде чем он доберется до isset
функция, когда isset
проверяет свойство, возвращает True
,