2016-11-18 46 views
0

我有一個模型House和一個模型energy_classLaravel雄辯的關係未定義的屬性

房子只有一個能源類。能源類可以分配給多個房屋。因此,我這樣定義的關係:

House.php

class House extends Model 
{ 
    public function energy_class() 
    { 
     return $this->hasOne('App\energy_class', 'id', 'energy_class'); 
    } 
} 

energy_class.php

class energy_class extends Model 
{ 
    public function house() 
    { 
     return $this->belongsToMany('App\House'); 
    } 
} 

當通過內部數據,以這樣的觀點:

$house = House::with('energy_class')->find($id); 
return view('admin.houses.edit')->with('house', $house); 

並在像這樣的視圖上引用它:

$house->energy_class()->name 

我得到這個錯誤:Undefined property: Illuminate\Database\Eloquent\Relations\HasOne::$name

在做這樣的:$house->energy_class->name我得到trying to get property of non-object

+0

您可以顯示數據庫的表名稱和列名稱嗎? –

+0

桌子:'房子','energy_classes'。列:'house.energy_class','energy_classes.name' – Scarwolf

回答

2

你的第一個建議:

$house->energy_class()->name 

不行的,因爲在這一點上,你只所謂的關係,你還沒有從它指定你想要的,例如:

$house->energy_class()->first() 

您的第二次嘗試返回空,因爲$ house-> energy_class(與上面的代碼相同)沒有返回任何結果。

可以有不同的原因是:

  • 你們的關係是不正確簽署了
  • 您的數據庫未正確設置(?有你設置在遷移外鍵)
  • 房子實際上沒有能源類填寫

我懷疑你的情況可能是第二或第三。你可以將我的移植腳本粘貼到我嗎?

編輯:PS。如果發生此錯誤的原因可能不是每個房屋實際上都有一個能源級別,則可以使用以下代碼來檢查此問題:

$house->energy_class ? $house->energy_class->name : "No energy class available"; 
+0

這裏是遷移的一部分:'$ table-> integer('energy_class') - > unsigned(); $ table-> foreign('energy_class') - >參考文獻('id') - > on('energy_classes');'我試圖編輯的房子有id集合1的能源類,名稱'A ++' – Scarwolf

+0

'$ house-> energy_class() - > first() - > name'正在工作。但不應該有沒有'first()'因爲這種關係應該告訴laravel只有一個相關的記錄... – Scarwolf

+0

$ house-> energy_class-> name不起作用,但你的建議確實有效。很高興聽到你有需要的信息!您仍然需要首先詢問的原因是因爲還有其他各種選項(例如,firstOrFail,firstOrCreate)可用。 – visscher