У меня есть модель Tab
, которая имеет полиморфное отношение один ко многим c со многими другими моделями, включая мою модель User
. Я назвал это отношение customizers
(потому что они настраивают содержимое вкладки) и сохранил их в таблице с именем tab_customizers
с customizer_id
и customizer_type
как столбцы, связанные с отношениями. Поскольку это отношение также может иметь разные типы с одной и той же моделью, я включил еще один столбец с именем relation_type
.
Например, между моими моделями Tab
и User
есть 2 разных отношения:
- A
User
может относиться к Tab
как к author
(если связанный пользователь напишет сообщение, оно будет отображено на вкладке) - A
User
может относиться к Tab
как к фокусу mention
(если соответствующий пользователь упоминается в сообщении, он будет отображаться на вкладке)
Здесь определены мои отношения в модели Tab
:
public function authors()
{
return $this->morphedByMany(User::class, 'customizer', 'tab_customizers')->where('relation_type', 'author');
}
public function mentions()
{
return $this->morphedByMany(User::class, 'customizer', 'tab_customizers')->where('relation_type', 'mention');
}
А вот мои поля Nova в моем Tab
ресурсе:
MorphedByMany::make('authors', User::class),
MorphedByMany::make('mentions', User::class),
Вот моя проблема: Когда я выбираю User
модель для подключения к mentions
(на самом деле к customizers
с mention
в качестве relation_type
), она будет прикреплена с author
как relation_type
. Как я могу сделать Nova различать guish между этими двумя типами?
Кроме того, я не могу иметь отношения между Tab
и User
с author
как relation_type
и другим с mention
как relation_type
одновременно. Когда я пытаюсь (используя tinker) присоединить отношение одного из типов, в то время как отношение другого типа уже существует, оно обновит существующее отношение и не присоединит новое.