【问题标题】:How to load Laravel with nested models and limit the nested models?如何使用嵌套模型加载 Laravel 并限制嵌套模型?
【发布时间】:2018-11-07 07:05:45
【问题描述】:

大家好,我正在使用 Laravel 5.6 我在数据库中有三个表 posts、cmets 和 reply 以及三个模型 Post 、 Comment 、 Reply

关系如下:一个帖子有很多cmet,一个评论有很多回复。我创建了一条路线,当被击中时会返回一些数据;但是,我希望这些数据以特定方式阅读此示例:

假设我的数据库中有 6 个帖子,每个帖子有 6 个 cmets,每个评论有 6 个回复我只想返回前 3 个帖子以及每个帖子的前 3 个 cmets,以及每个评论的前 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 个 cmets 和前 3 个回复,但对于其他帖子,我只得到一个 cmets 的空键,因此没有回复

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

【问题讨论】:

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


【解决方案1】:

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) 应用于您的关系。

回复也是如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-14
    • 2014-05-02
    • 1970-01-01
    • 2018-04-17
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多