提前限制结果在Laravel

时间:2014-03-22 20:46:25

标签: php mysql laravel laravel-4 eloquent

我做了很多研究但仍然没有解决问题,希望你们中的一些人可以帮助我。

我有一张表Post和一张表Comment,其正常关系Post Has Many Comments

我为获得10条相关评论的帖子设置了以下查询:

Post::with('comments')->limit(10)->get();

它确实有效,但仍然不是我的最终结果,因为我希望将评论限制为5 对于每个帖子

到目前为止,我尝试使用此查询来限制我的评论,即使逻辑上它只会限制所有帖子的5条评论。事实上,我确实如此猜测。

Post::with(['comments' => function($comments){

       $comments->limit(5);

}])->limit(10)->get();

也许有说服力这种查询是不可能的,但是如果使用2个不同的查询并合并结果我怎样才能使它工作?

任何形式的帮助都会非常感激。

由于

3 个答案:

答案 0 :(得分:2)

解决方案在这里: http://softonsofa.com/tweaking-eloquent-relations-how-to-get-n-related-models-per-parent/

这样的事情:     返回$ this-> comments() - > latest() - > nPerGroup(' post_id',5);

答案 1 :(得分:0)

我认为你需要做的是限制关系中的帖子数量。

这样的事情可以做到:

public function comments()
{
    return $this->hasMany('Comment')->limit(5);
}

虽然没有测试过,但它可能无法正常工作。

答案 2 :(得分:0)

请使用

    $lines = \Category::where('status', \Category::STATUS_PUBLISH)
            ->with(['firstThreeComment'])
            ->get()
            ->map(function( $category ){
                $category->firstThreeComment = $category->firstThreeComment->take(3);
                return $category;
});