2016-11-18 39 views
0

私はモデルHouseとモデルenergy_classを持っています。Laravel Eloquent Relationship未定義のプロパティ

家には1つのエネルギークラスしかありません。エネルギークラスは複数の住宅に割り当てることができます。従って私は、このような関係を定義した:

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

テーブル: 'house'、' energy_classes'。列: 'house.energy_class'、' energy_classes.name' – Scarwolf

答えて

2

あなたの最初の提案を得る:

$house->energy_class()->name 

は、あなただけのために、この時点では、動作しません関係を呼び出すと、あなたが望むものをまだ指定していません。例えば:

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

$ house-> energy_class(上記のコードと同じです)が結果を返さなかったため、2回目のtryは空を返します。

これにはさまざまな原因がある場合もあります。

  • あなたの関係が適切に
  • あなたのデータベースが正しくセットアップ(あなたの移行の外部キーを設定している?)
  • ないサインアップしていません家に実際に記入されたエネルギークラスがありません

あなたの場合は、2番目または3番目の可能性があります。あなたのマイグレーションスクリプトを貼り付けることができますか?

編集:PS。おそらく、各家は実際にエネルギーのクラスを持っていないため、このエラーが発生した場合は、あなたがこれを確認するには、次のコードを使用することができます。

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

移行の一部です: '$ table-> integer( 'energy_class') - > unsigned(); ( 'energy_classes'); '私が編集しようとしている家には、クラスを参照するid 1のエネルギークラスがあります。 'A ++' – Scarwolf

+0

'$ house-> energy_class() - > first() - > name'という名前が働いています。しかし、 'first()'がなければ可能ではないはずです。関係はlaravelに関連するレコードが1つだけあることを伝えなければならないので... – Scarwolf

+0

$ house-> energy_class-> nameは動作しませんが、あなたの提案はうまくいきます。あなたが考える必要がある情報を聞いてうれしい!最初に尋ねなければならない理由は、他にもさまざまなオプション(firstOrFail、firstOrCreateなど)が用意されているからです。 – visscher

関連する問題