Laravel: Как создать полиморфное отношение «многие ко многим» hasManyThrough? - PullRequest
0 голосов
/ 11 апреля 2019

Ситуация

У меня есть следующие модели :

  • Post
  • Video
  • Tag

Они хранятся в таблицах базы данных :

  • postsid и name столбцы)
  • videosid и name столбцами)
  • tagsid и name столбцами)

А также таблица taggables со столбцами:

  • tag_id (идентификатор Tag)
  • taggable_id (идентификатор Post или Video)
  • taggable_type (* App\Post или App\Video)

Обе модели Post и Video имеют morphToMany отношение к Tag, используя:

public function tags()
{
    return $this->morphToMany('App\Tag', 'taggable');
}

И модель Tag имеет обратные отношения morphedByMany , установленные с:

public function posts()
{
    return $this->morphedByMany('App\Post', 'taggable');
}

public function videos()
{
    return $this->morphedByMany('App\Video', 'taggable');
}

(Пока это работает, и все в точности так, как описано в Laravel Docs .)

Теперь, в дополнение к этому, у меня есть модель TagGroup, которая имеетOne-to-Many отношение с Tag, поэтому несколько тегов могут принадлежать группе тегов.(При использовании hasMany('App\Tag') и belongsTo('App\TagGroup') с использованием столбца tag_group_id в таблице tags.)

Вопрос

Как настроить отношениямежду моделью TagGroup и Post и (отдельно) Video?(Например, чтобы получить все сообщения, которые были помечены тегами определенной группы.)

Я знаю, что есть hasManyThrough, но, похоже, это не работает с полиморфными отношениями "многие ко многим".как промежуточный.Или я что-то не так делаю?

Есть также определение пользовательских промежуточных таблиц с MorphPivot и ->using(), но в документах об этом очень неясно.

Можно ли это сделать без каких-либо дополнительных плагинов / фреймворков?

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