从两个表中选择hasMany
,belongsToMany
等关系,我遇到了麻烦。
我有表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'));
}
并且在视图中我想要显示来自评论表的所有reviews
和来自项目表的titles
。
@foreach($reviews as $review)
{!!$review->item()->title!!}
@endforeach
错误
SQLSTATE [42S02]:未找到基表或视图:1146表'ps.item_id'不存在(SQL:选择
items
。*,item_id
。id
aspivot_id
item_id
item_id
pivot_item_id
来自items
内item_id
items
id
item_id
item_id
{1}}。item_id
其中id
。{{1}}位于(15,16,17,18,19,20,21,22,23,24,25))
显然我的关系是对的。有人可以帮我一点吗?
答案 0 :(得分:0)
您的关系设置有点不对。
您目前与hasMany
的反义关系为belongsToMany
,这是一种多对多的关系。
这意味着每个项目都有多个评论(这是正确的) 但这也意味着每次审核都适用于多个项目(我认为这是错误的)。
要解决此问题,您可以使用以下内容替换item()
内的Review
功能:
public function item()
{
return $this->belongsTo('App\Item', 'item_id','id');
}
这会将你的关系改变为一对多的关系。
每个项目仍有多个评论,但现在每个评论仅链接到一个项目。这也将允许您的其他代码(控制器)工作。
此外,您应该从视图中删除呼叫中的perentesis。将其作为函数调用将返回关系而不是实际模型。