2017-08-17 45 views
0

我有兩個表與hasMany,belongsToMany等關係的選擇麻煩。選擇和顯示具有很多關係的列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')); 
} 

,並鑑於我想表明從評價表,從項目表中的所有reviewstitles

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

誤差

SQLSTATE [42S02]:基表或視圖未找到:1146表 'ps.item_id' 不存在(SQL:選擇items *,item_idid如。 pivot_iditem_iditem_id作爲pivot_item_iditems內上items加入item_idid = item_iditem_iditem_id哪裏。id在(15,16,17,18,19,20,21,22,23 ,24,25))

顯然我的關係是錯誤的。任何人都可以幫我一點點嗎?

+0

您在'Review'模型中的'belongsToMany'關係應該是'belongsTo'關係。 – milo526

回答

1

您的關係的設置有點不對。

您目前有一個hasMany的關係,反之爲belongsToMany,這是一個多對多的關係。

這意味着每個項目都有多個評論(這是正確的)。
但這也意味着每個評論適用於多個項目(我認爲這是錯誤的)。

爲了解決這個問題,你可以用下面的替換裏面Review的你item()功能:

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

這將改變你的關係是一個一對多的關係。

每個項目仍有多個評論,但現在每個評論只鏈接到一個項目。這也將允許你的其他代碼(控制器)工作。

此外,您應該從視圖中的呼叫中刪除perentesis。將它作爲函數調用將返回關係而不是實際的模型。

+0

現在它工作完美。謝謝你的解釋!將在5分鐘內接受答案。 – Ivan