Laravel多个hasmany关系限制问题

时间:2018-10-12 06:30:15

标签: laravel join eloquent relation

我有3个收藏页,帖子,评论和相关信息

页面=> hasmany =>帖子=> hasmany =>评论

页面模型关系

public function posts()
{
    return $this->hasMany('App\Models\PostsModel', 'page_id');
}

发布模型关系

public function comments()
{
    return $this->hasMany('App\Models\CommentsModel', 'post_id')->limit(10);
}

查询

PagesModel::with('posts.comments')->get();

它假设所有页面帖子和每个帖子10条评论, 但它会跳过结果。许多帖子有多条评论,但无法获得评论。

任何解决方案或更好的方法。谢谢

2 个答案:

答案 0 :(得分:0)

这是一个常见问题,没有简单的答案。阅读https://softonsofa.com/tweaking-eloquent-relations-how-to-get-n-related-models-per-parent/以获得解释

答案 1 :(得分:0)

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

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

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

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

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

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