Laravel - вложенные отношения через многие ко многим

У меня есть установка с родителями и их детьми. У ребенка может быть несколько родителей, и каждому ребенку система может назначить несколько сообщений. У каждого родителя также может быть несколько детей.

У меня уже есть экземпляр пользователя: $parent. Теперь я хотел бы получать все сообщения, принадлежащие детям этого родителя. Laravel «имеет многие через» не работает с отношениями «многие ко многим».

На данный момент я решил это с помощью пользовательского метода, но я ищу более чистые способы решения этой проблемы.

Это моя установка:

Пользователь (родители):

class User extends Eloquent
{
    public function children()
    {
        return $this->belongsToMany('Child', 'parents_children', 'user_id');
    }
}

Ребенок:

class Child extends Eloquent
{
    public function parents()
    {
        return $this->belongsToMany('User', 'parents_children', 'child_id');
    }

    public function posts()
    {
        return $this->hasMany('Posts', 'ChildPost');
    }
}

Сообщения

class ChildPost extends Eloquent
{
    public function child()
    {
        return $this->belongsToMany('Child');
    }
}

person Oxudes    schedule 21.08.2014    source источник
comment
Я также ищу что-то подобное, но похоже, что нет запеченного решения, потому что многие через многие ко многим   -  person cdarken    schedule 09.02.2015


Ответы (1)


Для этого случая нет исходной связи.

Я создал отношения HasManyThrough с поддержкой BelongsToMany: Репозиторий на GitHub

После установки вы можете использовать его следующим образом:

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

    public function childPosts() {
        return $this->hasManyDeep(ChildPost::class, ['parents_children', Child::class]);
    }
}
person Jonas Staudenmeir    schedule 24.07.2018