如何使用laravel 5.3创建一个“有很多通过”关系的4个表

时间:2017-01-24 11:00:03

标签: php laravel

在laravel中,您可以与3个表格建立"has-many-through"关系。

我想知道是否有可能与4个表创建这样的关系,如果是,如何?

由于这个question,我知道如何使用sql语法来实现它,但我想先使用laravel标准解决方案。

感谢您的帮助。

实施例

4个表:国家,用户,帖子,评论

countries
    id - integer
    name - string

users
    id - integer
    country_id - integer
    name - string

posts
    id - integer
    user_id - integer
    title - string

comments
    id - integer
    post_id - integer
    title - string
    body - string

我想执行以下操作,列出一个国家/地区的所有评论。

$country = Country::first();
$country->comments;

2 个答案:

答案 0 :(得分:1)

4个表没有hasManyThrough关系。但是,您可以使用Nested eager loading

$country = Country::with('users.posts.comments')->first();

答案 1 :(得分:0)

我创建了一个HasManyThrough级的无限关系:Repository on GitHub

安装后,您可以像这样使用它:

class Country extends Model {
    use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

    public function comments() {
        return $this->hasManyDeep(Comment::class, [User::class, Post::class]);
    }
}