Ситуация
У меня есть следующие модели :
Они хранятся в таблицах базы данных :
posts
(с id
и name
столбцы) videos
(с id
и name
столбцами) tags
(с id
и 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()
, но в документах об этом очень неясно.
Можно ли это сделать без каких-либо дополнительных плагинов / фреймворков?