Laravel 检查是否设置了动态 属性

Laravel Checking if a Dynamic property is set

我有一个 class foo 属于 bar.

foo 我有:

public function bar(){
    return $this->belongsTo('App\Models\Bar');
}

我有一个对象 $foo bar_idnull

Foo 中,我有一个 if 语句:

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 时,我看到该值不为空。为什么我不讨论这个如果?

我终于明白了。显然 isset 没有调用动态函数,这意味着该值没有被加载,这意味着它仍然是 null。为了解决这个问题,我做了以下事情:

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

因为我在它到达 isset 函数之前调用 $this->bar() ,当 isset 检查 属性 时,它 returns True.

您可以进行更安全的检查:

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

这将检查是否设置了 bar 属性 并且实例化了相关关系。