Laravel 5.1:雄辩的关系很多,限制记录

时间:2015-10-13 09:49:43

标签: laravel-5.1

我对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条评论,你有什么建议吗?任何评论都非常感谢。谢谢!

6 个答案:

答案 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); }])