如果评论user_id = $ id,我希望获得所有项目(主题)及其评论。我尝试这样的东西,但它不起作用。因此,如果Item没有得到user_id = $ id的评论,那么我就不需要这个项目了。
在DiscussionsItem模型中我有方法:
public function discussionsComments() {
return $this->hasMany('DiscussionsComment', 'discussionsitem_id');
}
我在控制器中的查询是这样的:
$items = DiscussionsItem::whereBrandId($brand_id)
->whereBrandCountryId($country_id)
->with(['discussionsComments' => function($query) use ($id) {
$query->where('user_id', '=', $id);
}])
->whereHas('discussionsComments', function($query) use ($id) {
$query->where('user_id', '=', $id);
})
->with(['views' => function($query) use ($id) {
$query->where('user_id', $id)->count();
}])
->orderBy('created_at', 'DESC')->get();
我的问题是我收到了带注释的项目,其中注释为user_id!= $ id。
P.S。我需要收集5条评论,但我无法想象如何做到这一点,因为 - >在我急切的负载中采取(5)是行不通的。
我想通了(工作代码):
$items = DiscussionsItem::whereBrandId($brand_id)
->whereBrandCountryId($country_id)
->whereHas('discussionsComments', function($query) use ($id) {
$query->where('user_id', '=', $id);
})
->with(['views' => function($query) use ($id) {
$query->where('user_id', $id)->count();
}])
->orderBy('created_at', 'DESC')->get();
$items->each(function($topic) use ($id, 5){
$topic->comments = $topic->discussionsComments()->where('user_id', '=', $id)->get()->take(5);
});
答案 0 :(得分:0)
您可以执行自定义范围,或仅限制关系返回的金额:
public function discussionsComments() {
return $this->hasMany('DiscussionsComment', 'discussionsitem_id')
->latest()
->take(5);
}