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