2016-09-07 49 views
0

我試圖實現一對一的關係,即時通訊從一個'命令'調用它,並且在查看該關係中的任何記錄時,我總是收到未定義的屬性錯誤。Laravel一對一的關係給出錯誤

在我的模型,我有以下

public function preferences() 
{ 
    return $this->hasOne('App\WebsitePreferences', 'id', 'website_id'); 
} 

然後即時調用它是這樣

$websites = Website::where('active', 1)->get(); 

    foreach ($websites as $website) { 

     var_dump($website->preferences()->status); 

    } 

確切的錯誤是如下

Undefined property: Illuminate\Database\Eloquent\Relations\HasOne::$status 

如果我做的var_dump( $ website),它將返回該表中的所有值,而不是與該'W關聯的WebsitePreferences表中的值ebsite'

我有一些其他的一對一關係,他們都工作得很好。

任何幫助將不勝感激。

+0

嘗試做'網站::與( '喜好') - > get()方法' –

回答

1

當您將關係作爲方法調用時,它將返回QueryBuilder實例。這可以讓你保持鏈接的位置,等等。

相反,你應該把它作爲一個屬性:

$website->preferences->status 
+0

我試過了,它會返回試圖獲得的財產非對象 – BigJobbies

+0

如果我將其更改爲$ website-> preferences ['status'],它只是返回NULL – BigJobbies

+0

用dd($ website-> preferences)獲得什麼? – Hyti

0

在模型中嘗試這個辦法:

public function preferences() 
{ 
    return $this->hasOne('App\WebsitePreferences', 'website_id'); 
} 

在你的控制器:

Website::with('preferences')->get() 
在你看來

foreach ($websites as $website) { 
    @php(dd($website->preferences->status)); } 
0
public function preferences() 
{ 
    return $this->hasOne('App\WebsitePreferences', 'id', 'website_id'); 
} 


$websites = Website::where('active', 1)->get(); 

您需要檢查空的關係

foreach ($websites as $website) { 
    if(empty($website->preferences) === false){ 
     $website->preferences->status 
    } 
}