Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Які поширені випадки використання для морфтоманства в Ларавелі


Які поширені випадки використання для морфтоманства в Ларавелі


Зв'язок `Morphtomany 'у Laravel використовується для визначення поліморфних відносин багато-багато, де кілька моделей можуть поділяти взаємозв'язок з єдиною типом моделі через поліморфну ​​проміжну таблицю. Це дозволяє гнучкої асоціації багатьох різних моделей із загальною моделлю, не потребуючи окремих зведених таблиць для кожної пари моделі.

Загальні випадки використання для `morphtomany` в Laravel

** 1. Системи тегів
Одним з найпоширеніших випадків використання є реалізація системи міток, де кілька різних моделей (наприклад, публікації, відео, сторінки) можна позначити однаковими тегами. Замість того, щоб мати окремі поворотні таблиці для кожного співвідношення моделі, Morphtomany` дозволяє зберігати всі теги в одній таблиці "тегів" та пов'язані з ними поліморфно з будь-якою моделлю.
Наприклад, обидва моделі `post`, і` video` можуть мати метод `tags ()` за допомогою `morphtomany` для отримання тегів, а модель` tag` може використовувати `morphedbymany`, щоб отримати всі публікації або відео, позначені з ним [1] [5] [9].

** 2. Категоризація різних типів вмісту
Подібно до тегів, категорії можна ділитися для різних типів вмісту. Наприклад, і статті, і продукти, можливо, потрібно буде класифікувати, а поліморфне відношення багатьох до багатьох дозволяє їм ділитися категоріями без зайвих таблиць.

** 3. Призначення мітків або атрибутів для декількох моделей
Якщо у вас є етикетки, атрибути або функції, які можуть застосовуватися до різних моделей (наприклад, користувачі, замовлення, продукти), використовуючи `morphtomany`, дозволяє гнучко асоціювати ці мітки з будь -яким типом моделі.

** 4. Ролі або дозволи користувача в декількох типах користувачів
У програмах з декількома типами користувачів (наприклад, адміністратор, клієнт, постачальник) ролі або дозволи можуть бути призначені поліморфно за допомогою `morphtomany`, так що ролі керуються в одній таблиці, але пов'язані з різними моделями користувачів [1].

** 5. Пов’язання коментарів або вкладень з декількома моделями багато-багато
Незважаючи на те, що коментарі часто є поліморфними, можуть бути сценарії, коли багато коментарів або вкладень відносяться до декількох моделей багато-багато. `Morphtomany` може використовуватися для моделювання таких відносин.

Як працює `morphtomany`

- Він використовує єдину таблицю поворотів, наприклад, `taggables`, зі стовпцями для` tag_id`, `taggable_id` і` taggable_type`.
- Стовпці `taggable_id` і` taggable_type` дозволяють Laravel визначати, з якою моделлю пов'язаний тег.
- На пов'язаних моделях (наприклад, `post`,` video`) ви визначаєте метод, який повертає `$ this-> morphtomany (тег :: class, 'taggable')`.
- На моделі `tag` ви визначаєте зворотні відносини, використовуючи` morphedbymany`, щоб отримати всі моделі заданого типу, пов'язані з цим тегом [1] [5].

Короткий зміст

`Morphtomany` ідеально підходить, коли ви хочете асоціювати кілька моделей із загальною моделлю багаторазовим поліморфним. Він широко використовується для систем тегування, категоризації, призначення ролі для декількох типів користувачів та будь -якого сценарію, коли багато різних моделей поділяють загальний набір пов'язаних моделей, не потребуючи окремих поворотних таблиць для кожної пари.

Цей підхід спрощує проектування бази даних та підтримку коду, централізуючи поліморфні відносини багатьох до багатьох, в єдину елегантну структуру.

Цитати:
[1] https://blog.logrocket.com/polymorphic-relationships-laravel/
[2] https://laraveldaily.com/post/polymorphic-relations-laravel-open-source-examples
[3] https://stackoverflow.com/questions/57522923/how-to-use-morphtomany
[4] https://stackoverflow.com/questions/43285779/laravel-polymorphic-relations-has-many-through
[5] https://laravel.com/docs/11.x/eloquent-relationships
[6] https://www.linkedin.com/pulse/complete-guide-polymorphic-relationships-morphs-sajith-madhubashana-rk1xc
[7] https://joedixon.co.uk/a-practical-usecase-for-laravels-polymorphic-relalships
4
[9] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all-related-records