如何使用嵌套模型加载Laravel并限制嵌套模型?

时间:2018-05-28 16:43:10

标签: laravel eloquent query-builder laravel-query-builder

大家好我正在使用Laravel 5.6我在数据库中有三个表帖子,评论和回复以及三个模型帖子,评论,回复

关系如下一篇文章有​​很多评论,一篇评论有很多回复。我创建了一个路由,当命中时会返回一些数据;但是,我希望这个数据以特定的方式读取这个例子:

让我说我的数据库中有6个帖子,每个帖子有6个评论,每个评论有6个回复我想只返回前3个帖子以及每个帖子的前3个评论也是每个评论的前3个回复

//this is a function inside a controller 
//and for sure I have make sure to make use of the models namespaces 

public function test(){
    $posts = Post::with(['comments' => function($data){
        return $data->take(3);
    },
    'comments.replies' => function($data){
        return $data->take(3);
    }])->paginate(3);

    //returning the posts
    return $posts
}

这种方式正在工作它返回前3个帖子并且它返回前3个评论和前3个回复仅针对第一个帖子但是对于其他帖子我只得到评论的空键,因此没有答复作为结果< / p>

希望你能得到我的问题,请帮忙 对不起大问题 提前谢谢。

1 个答案:

答案 0 :(得分:0)

Laravel中没有对此的本地支持。

我为此创建了一个包:https://github.com/staudenmeir/eloquent-eager-limit

在父模型和相关模型中都使用HasEagerLimit特性。

class Post extends Model {
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}

class Comment extends Model {
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}

然后,您可以将->take(3)应用于您的关系。

答复也一样。