Laravel Нова не различает guish между различными типами полиморфизма c отношения между одними и теми же моделями - PullRequest
0 голосов
/ 15 февраля 2020

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

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