Laravel 5.1:仅获取相关模型的记录

时间:2016-10-07 13:07:47

标签: php laravel eloquent

我有三种模式:

  • 分类
  • 注释

这些是他们的实现:

class Category extends \Eloquent {
    public function posts() {
        return $this->hasMany('Post');
    }
}


class Post extends \Eloquent {
    public function category() {
        return $this->belongsTo('Category');
    }
    public function comments() {
        return $this->hasMany('Comment');
    }
}

class Comment extends \Eloquent {
    public function post() {
        return $this->belongsTo('Post');
    }
}

使用eloquent,是否有可能获得与类别相关的所有评论(只有评论,没有帖子)的列表(数组或集合)? (这意味着,给定一个类别找到所有相关的帖子,然后返回所有相关的评论)。

提前致谢!

1 个答案:

答案 0 :(得分:2)

只需在模型类别上使用hasManyThrough关系:

class Category extends \Eloquent {
    public function posts() {
        return $this->hasMany(Post::class);
    }
    public function comments() {
        return $this->hasManyThrough(Comment:class,Post::class);
    }
}

之后,您只需致电$category->comments即可获得一个包含与类别相关的所有评论的集合。

有关其他信息,请参阅https://laravel.com/docs/5.1/eloquent-relationships#has-many-through

对于Laravel 5.3:https://laravel.com/docs/5.3/eloquent-relationships#has-many-through