0

我有一个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我看到该值不为空。为什么我不进入这个如果?

4

2 回答 2

2

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

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

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

于 2015-09-25T18:17:05.633 回答
0

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

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

由于我在 $this->bar() 到达isset函数之前调用它,因此在isset检查属性时,它返回True.

于 2015-09-25T18:02:03.503 回答