2015-09-25 103 views
0

我有一個類,屬於barLaravel檢查是否設置了動態屬性

foo

我:

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

我有一個對象$foo誰的bar_idnull

Foo,我有一個,如果statment:

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

毫不奇怪,我得到一個Trying to get property of non-object錯誤。所以我加了一個電話給isset。但是現在if中的代碼永遠不會被評估,因爲if總是假的。我的新的,如果是這樣的:

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

設置bar_id後,我仍然不打算進入if。當我嘗試print bar_id時,我看到該值不爲空。爲什麼我不會進入這個如果?

+0

看起來不對。 Bar怎麼能屬於Bar?或者也許是錯綜複雜的。 –

+0

Foo屬於酒吧。動態屬性在Foo類中。 – ajon

+0

模型欄是否有名爲「id」的列? –

回答

0

我終於明白了。顯然isset不會調用動態函數,這意味着該值不會被加載,這意味着它仍然是null。爲了解決它,我做了以下內容:

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

因爲我調用$這個 - >巴()它到達isset功能之前,當isset檢查屬性,它返回True

1

你可以做一個更安全的檢查:

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

如果bar屬性設置後,對應的關係被實例化這將檢查。