Laravel Nova не различает разные типы полиморфных отношений между одними и теми же моделями.
У меня есть Tab
модель, которая имеет полиморфные отношения "один ко многим" со многими другими моделями, включая мою User
модель. Я назвал эти отношенияcustomizers
(потому что они настраивают содержимое вкладки) и хранят их в таблице с именем tab_customizers
с customizer_id
а также customizer_type
как столбцы, связанные с отношениями. Поскольку это отношение также может иметь разные типы с одной и той же моделью, я включил еще один столбец с именемrelation_type
.
Например, между моими Tab
а также User
моделей, существует 2 разных отношения:
- А
User
может относиться кTab
как егоauthor
(если связанный пользователь напишет сообщение, оно будет отображаться на вкладке) - А
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');
}
А вот и мои поля Новы в моем Tab
ресурс:
MorphedByMany::make('authors', User::class),
MorphedByMany::make('mentions', User::class),
Вот моя проблема: когда я выбираю User
модель, чтобы прикрепить его к mentions
(на самом деле customizers
с mention
как его relation_type
), он будет прикреплен к author
как relation_type
. Как я могу заставить Нову различать эти 2 типа?
Кроме того, я не могу иметь отношения между Tab
а также User
с author
как relation_type
и еще один с mention
как relation_type
в то же время. Когда я пытаюсь (используя tinker) прикрепить отношение одного из типов, в то время как отношение другого типа уже существует, оно обновит существующее отношение и не присоединит новое.