我对Laravel 5.1有一个问题:Eloquent relationship hasmany,Limit records我有2个表:feed,comments。该请求是针对每个特定订阅源获得5个订阅源和评论。我目前正在使用以下查询:
public function getFeed($user_id)
{
return Feed::whereUserId($user_id)->with(['comments'])->take(10)->get()->map(function ($feed) {
$feed->comments = $feed->comments->take(5);
return $feed;
});
}
但是,它会返回所有评论。我的想法是$ feed-> comments = $ feed-> comments-> take(5);线不起作用。我只想为每个Feed收到5条评论,你有什么建议吗?任何评论都非常感谢。谢谢!
答案 0 :(得分:0)
Feed::whereUserId($user_id)->with([
'comments' => function($query) {
// You should limit the comments by editing the
// relationships query not the main query.
$query->take(5);
}
])->take(10)->get();
通过这种方式,您可以限制所需的Feed数量以及每个Feed的评论数量。
答案 1 :(得分:0)
如果它适用于所有情况,您可以在Feed模型中调整关系,如下所示:
public function comments() {
return $this->hasMany('App\Comment')->limit(5);
}
答案 2 :(得分:0)
$feed= Feed::whereUserId($userId)->with(['comments'])->get()->map(function ($query) {
$query->setRelation('comments', $query->comments->take(10));
return $query;
});
答案 3 :(得分:0)
总比没有好,我昨天遇到了同样的问题,最后在模型上设置了整个关系数组。
因此,您的情况将是这样:
return Feed::whereUserId($user_id)->take(10)->get()->map(function($feed) {
$feed->setRelation('comments', $feed->comments->take(5));
return $feed;
});
答案 4 :(得分:0)
我面对同样的问题已有一个多月了。我只是想优化查询,因为从100万条记录中加载所需的数据花了将近1.5秒。
我利用了Eloquent ORM Collection Load()方法。这样可以将加载时间减少到300毫秒。
就您而言,
return Feed::whereUserId($user_id)
->get()
->each(function ($feed) {
$feed->load('comments')->take(5);
})
});
答案 5 :(得分:-1)
错误可能在这里
$feed->comments = $feed->comments->take(5);
哪个应该是
$feed->comments = $feed->comments->take(5)->get();
我建议你这样写
$feed->load(['comments' => function($query){ return $query->take(5); }])