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) прикрепить отношение одного из типов, в то время как отношение другого типа уже существует, оно обновит существующее отношение и не присоединит новое.

0 ответов

Другие вопросы по тегам