Laravel Проверка, установлено ли свойство Dynamic

У меня есть класс 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 Я вижу, что значение не является нулевым. Почему я не собираюсь в это, если?

0

Решение

Вы можете сделать более безопасную проверку:

if($this->bar instanceof \App\Models\Bar) {
echo 'in if';
}

Это проверит, если bar свойство устанавливается и создается соответствующее отношение.

1

Другие решения

Я наконец-то понял. По-видимому isset не вызывает динамическую функцию, что означает, что значение не загружается, что означает, что оно все еще null, Чтобы обойти это, я сделал следующее:

$bar = $this->bar();
if (isset($this-> bar) && $this->bar->id == 1) { echo "in if"; }

Так как я вызываю $ this-> bar (), прежде чем он доберется до isset функция, когда isset проверяет свойство, возвращает True,

0

По вопросам рекламы [email protected]