Різниця між `Morphtomany 'і` Morphedbymany' у поліморфних відносинах Laravel багато-багато полягає в першу чергу у їх ролі у відносинах та тому, як структура бази даних їх підтримує.
Структура бази даних у поліморфних багатьох до багатьох
Поліморфні відносини багато-багато включають три основні таблиці:
- Дві модельні таблиці (наприклад, `Posts` та` теги`)
- Одна проміжна таблиця повороту (наприклад, `taggables`)
Таблиця поворотів містить щонайменше три стовпці:
- `tag_id` (ідентифікатор пов'язаної моделі, наприклад, тег)
- `taggable_id` (ідентифікатор моделі, яка пов'язана з тегом, наприклад, публікацією чи відео)
- `taggable_type` (ім'я класу або тип пов'язаної моделі, наприклад,` app \ models \ post` або `app \ models \ video`)
Ця структура дозволяє єдиній таблиці поворотів пов'язувати кілька різних моделей із загальною моделлю (теги в цьому випадку), не потребуючи окремих таблиць поворотів для кожної комбінації моделі [5] [9].
Роль `Морфтомана '
- Використовується на моделі, яка "володіє" або "має" поліморфні залежності.
- Визначає взаємозв'язок з точки зору моделі, яка пов'язана з багатьма іншими моделями.
- Наприклад, у моделі `Post` метод` tags () `використовує` morphtomany`, щоб отримати всі теги, пов’язані з цією публікацією.
.
- Це запитує фільтрування таблиці повороту за ідентифікатором поточної моделі та типом для пошуку пов’язаних моделей [5] [9].
роль `morphedbymany`
- Використовується на моделі, яка є мішенню поліморфних відносин.
-Визначає зворотну сторону поліморфних відносин багато-багато.
- Наприклад, у моделі `Tag`, такі методи, як` posts () `або` videos () `Використовуйте` morphedbymany`, щоб отримати всі публікації чи відео, пов'язані з цим тегом.
- Він визначає споріднений клас моделі та те саме ім'я морфу, що використовується в `morphtomany`.
.
Підсумок відмінностей у термінах бази даних
- `Morphtomany` називається моделлю, яка пов'язана з багатьма іншими, і вона використовує стовпці таблиці поворотів` taggable_id` і `taggable_type` для фільтрації записів, де` taggable_type` відповідає класу поточної моделі.
- `Morphedbymany` називається моделлю, яка пов'язана з (зворотним), і вона використовує таблицю поворотів, щоб знайти всі моделі певного типу, що відносяться до поточної моделі.
Обидва методи використовують однакову таблицю повороту, але відрізняються напрямком взаємозв'язку, який вони представляють. Таблиця поворотів залишається однаковою, зі стовпцями для ідентифікатора та типу відповідної моделі, що дозволяє пов'язувати кілька типів моделі через одну таблицю.
По суті, `Morphtomany` визначає взаємозв'язок з" батьківською "або" володінням "моделі, тоді як" morphedbymany` визначає зворотну залежність від "пов'язаної" сторони моделі, обидва покладаються на одну і ту ж поліморфну структуру повороту [5] [9] [1].
Цитати:
[1] https://laracasts.com/discuss/channels/laravel/difference-betweend-standard-polymorphic-many-to-many-polymorphic
[2] https://www.sitepoint.com/elsoquents-polymorphic-relationships-explained/
[3] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all-related-records
[4] https://laracasts.com/discuss/channels/eloquent/polymorphic-many-to-many-relation-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/simplificing-many-to-many-relationships-with-laravel-polymorphic-relations
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic-many-to-many-relationship-tible-with-relationship-to-a
[9] https://blog.logrocket.com/polymorphic-relationships-laravel/