2017-08-17 11 views
0

hasManybelongsToManyなどの関係で2つのテーブルから選択する際に問題があります。hasMany関係の列を選択して表示するLaravel

私が持っているテーブルitems

id 
title 

とテーブルreview

id 
item_id 

これは私のレビューモデルでは、私のアイテムのモデル

public function review() 
{ 
    return $this->hasMany('App\Review', 'item_id','id'); 
} 

である

public function item() 
{ 
    return $this->belongsToMany('App\Item', 'item_id','id'); 
} 

コントローラ

public function index() 
{ 
    $reviews = Review::with('item')->get(); 
    return view('index', compact('reviews')); 
} 

とビューに私はアイテムテーブルからのクチコミテーブルとtitlesからすべてのreviewsを示したいと思います。

@foreach($reviews as $review)  
    {!!$review->item()->title!!}  
@endforeach 

エラー

SQLSTATE [42S02]:ベーステーブルまたはビューが見つかりません:1146表 'ps.item_id'(SQL存在しない:。itemsを選択*、item_ididとしてpivot_iditem_iditemsからpivot_item_idとしてitem_id内側はitemsitem_idに参加する。id = item_iditem_idここitem_id。15、16、17、18、19、20、21、22、23(中id 、24,25))

明らかに私の関係は間違っています。誰も私をここで少し助けてくれる?

+0

'Review'モデルの' belongsToMany'関係は 'belongsTo'関係でなければなりません。 – milo526

答えて

1

あなたの関係の設定は少し間違っています。

現在のところ、逆数がbelongsToManyhasManyの関係がありますが、これは多対多の関係です。

これは、すべてのアイテムが複数のレビュー(正しい)を持つことを意味します。
これはまた、すべてのレビューが複数のアイテムに適用されることを意味します(私は間違っていると信じています)。

では、次のと Reviewの内側にあなたの item()機能を置き換えることができ、これを修正するには:これは1対多の関係であるためにあなたの関係が変化します

public function item() 
{ 
    return $this->belongsTo('App\Item', 'item_id','id'); 
} 

すべてのアイテムには複数のレビューが残っていますが、すべてのレビューは1つのアイテムにのみリンクされています。これにより、あなたの他のコード(コントローラ)も動作します。

さらに、ビューで通話を削除する必要があります。関数として呼び出すと、実際のモデルの代わりに関係が返されます。

+0

これで完璧に動作します。よく説明してくれてありがとう!答えは5分で受け入れます。 – Ivan

関連する問題