Laravel 检查是否设置了动态 属性
Laravel Checking if a Dynamic property is set
我有一个 class foo
属于 bar
.
在 foo
我有:
public function bar(){
return $this->belongsTo('App\Models\Bar');
}
我有一个对象 $foo
bar_id
是 null
。
在 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
属性 并且实例化了相关关系。
我有一个 class foo
属于 bar
.
在 foo
我有:
public function bar(){
return $this->belongsTo('App\Models\Bar');
}
我有一个对象 $foo
bar_id
是 null
。
在 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
属性 并且实例化了相关关系。