Разница между «Morphtomany» и «Morphedbymany» в полиморфных отношениях Laravel-полиморфических отношениях лежит главным образом в их ролях в отношениях и в том, как структура базы данных поддерживает их.
Структура базы данных в полиморфном
Полиморфные отношения многих ко многим включают три основных таблица:
- Две модельные таблицы (например, `post` и` Tags`)
- Одна промежуточная таблица поворота (например, `Taggables`)
Таблица Pivot содержит как минимум три столбца:
- `tag_id` (идентификатор связанной модели, например, Tag)
- `taggable_id` (идентификатор модели, которая связана с тегом, например, Post или Video)
- `taggable_type` (имя класса или тип связанной модели, например,` app \ models \ post` или `app \ models \ video`)
Эта структура позволяет единственной таблице поворота связывать несколько различных моделей с общей моделью (теги в данном случае) без необходимости отдельных таблиц поворота для каждой комбинации модели [5] [9].
Роль «Морфтомана»
- используется на модели, которая «владеет» или «имеет» полиморфные отношения.
- Определяет отношения с точки зрения модели, которая связана со многими другими моделями.
- Например, в модели `post` метод` Tags () `использует` morphtomany ', чтобы получить все теги, связанные с этим постом.
- Этот метод указывает связанную модель и «имя морф» (например, `'Taggable'`), что соответствует столбцам таблицы Pivot (` taggable_id` и `taggable_type`).
- Он запрашивает фильтрацию таблицы поворота с помощью идентификатора текущей модели и типа, чтобы найти связанные модели [5] [9].
Роль `morphedbymany
- Используется на модели, которая является целью полиморфных отношений.
-Определяет обратную сторону полиморфных отношений с многими-многими.
- Например, в модели `TAG`, такие методы, как` prots () `или` videos () `используйте` morphedbymany`, чтобы получить все сообщения или видео, связанные с этим тегом.
- Он определяет соответствующий класс модели и то же имя морфа, используемое в `morphtomany '.
- Этот метод запрашивает фильтрацию таблицы поворота по типу и идентификатору соответствующей модели, чтобы найти все модели этого типа, связанные с текущей моделью (TAG) [5] [9].
Сводка различий в терминах базы данных
- `morphtomany` вызывается на модели, которая связана со многими другими, и использует столбцы Pivot Table` taggable_id` и `taggable_type` для фильтрации записей, где` taggable_type` соответствует классу текущей модели.
- `morphedbymany` вызывается в модели, которая связана с (обратной), и использует таблицу Pivot, чтобы найти все модели конкретного типа, которые относятся к текущей модели.
Оба метода используют одну и ту же таблицу поворота, но различаются по направлению отношения, которую они представляют. Таблица Pivot остается прежней, с столбцами для идентификатора и типа соответствующей модели, что позволяет полиморфически связана несколько типов модели через одну таблицу.
По сути, «Morphtomany» определяет отношения со стороны «родителя» или «владения» модельной стороны, в то время как «Morphedbymany» определяет обратную связь со стороны «связанной» модели, оба полагаясь на одну и ту же полиморфную структуру таблицы поворота [5] [9] [1].
Цитаты:
[1] https://laracasts.com/discuss/channels/laravel/difference-between-standard-polymorphic-many-t- Many-polymorphic
[2] https://www.sitepoint.com/eloquents-polymorphic-relationships-explained/
[3.]
[4] https://laracasts.com/discuss/channels/eloquent/polymorphic-many-t-many-realtation-to-multiple-models
[5] https://laravel.com/docs/11.x/eloquent-relationships
[6] https://docs.octobercms.com/3.x/extend/database/relations.html
[7] https://simple-code.agency/blog/development/simpliation-many-t- Many-relationships-with-laravel-polymorphic-reletations
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic-many-t- Many-relationship-table-table-with-relationship-to-a
[9] https://blog.logrocket.com/polymorphic-relationships-laravel/