Relacja „morphtomany” w Laravel jest używana do zdefiniowania relacji polimorficznych wielu do wielu do wielu, w których wiele modeli może dzielić relację z jednym typem modelu poprzez polimorficzną tabelę pośrednią. Umożliwia to elastyczne powiązanie wielu różnych modeli z wspólnym modelem bez konieczności oddzielnych tabel obrotowych dla każdej pary modelu.
Wspólne przypadki użycia „morphtomany” w Laravel
** 1. Systemy tagowania
Jednym z najczęstszych przypadków użycia jest wdrożenie systemu tagowania, w którym wiele różnych modeli (np. Posty, filmy, strony) można oznaczyć te same tagi. Zamiast mieć oddzielne tabele obrotowe dla każdej relacji modelu-tag, „morphtomany” pozwala na przechowywanie wszystkich tagów w jednej tabeli „tags” i powiązane polimorficznie z dowolnym modelem.
Na przykład zarówno modele „post”, jak i „wideo” mogą mieć metodę `tags ()` przy użyciu `Morphtomany` do pobierania tagów, a model„ tag ”może użyć` MorphedByMany`, aby otagować wszystkie posty lub filmy [1] [5] [9].
** 2. Kategoryzacja różnych typów treści
Podobnie jak tagi, kategorie można udostępniać w różnych typach treści. Na przykład zarówno artykuły, jak i produkty mogą wymagać kategoryzowania, a polimorficzna relacja wiele do wielu pozwala im dzielić kategorie bez zbędnych tabel.
** 3. Przypisywanie etykiet lub atrybutów do wielu modeli
Jeśli masz etykiety, atrybuty lub funkcje, które mogą mieć zastosowanie do różnych modeli (np. Użytkowników, zamówień, produktów), użycie „morphtomany” pozwala elastycznie powiązać te etykiety z dowolnym typem modelu.
** 4. Role użytkowników lub uprawnienia dla wielu typów użytkowników
W aplikacjach z wieloma typami użytkowników (np. Administrator, klient, dostawca), role lub uprawnienia można przypisać polimorficznie za pomocą „morptomania”, aby role były zarządzane w pojedynczej tabeli, ale związane z różnymi modelami użytkowników [1].
** 5. Łączenie komentarzy lub załączników z wieloma modelami w sposób wielu do wielu
Podczas gdy komentarze są często polimorficzne jeden do wielu, mogą istnieć scenariusze, w których wiele komentarzy lub załączników odnoszą się do wielu modeli w sposób wielu do wielu. „Morphtomany” można wykorzystać do modelowania takich relacji.
Jak `Morphtomany 'działa
- Używa pojedynczej tabeli obrotowej, np. `Taggables`, z kolumnami dla` tag_id`, `taggable_id` i` taggable_type`.
- Kolumny „taggable_id` i` taggable_type` pozwalają Laravel określić, z którym modelem jest powiązany.
- W powiązanych modelach (np. „Post”, `video`) definiujesz metodę zwracającą„ $ this-> morphtomany (tag :: class, „taggable”) `.
- W modelu „tag” definiujesz odwrotne relacje przy użyciu „morphedByMany` w celu odzyskania wszystkich modeli danego typu powiązanego z tym znacznikiem [1] [5].
Streszczenie
„Morphtomany” jest idealny, gdy chcesz powiązać wiele modeli ze wspólnym modelem w sposób polimorficzny wielu do wielu. Jest szeroko stosowany do oznaczania systemów, kategoryzacji, przypisania ról w wielu typach użytkowników i dowolnym scenariuszu, w którym wiele różnych modeli ma wspólny zestaw powiązanych modeli bez konieczności oddzielnych tabel obrotowych dla każdej pary.
Takie podejście upraszcza projektowanie bazy danych i konserwację kodu poprzez centralizację polimorficznych relacji z wieloma do wielu w jedną elegancką strukturę.
Cytaty:
[1] https://blog.logreocke.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-hrough
[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-use-case-for-laravels-polymorficzne relacje
[8] https://stackoverflow.com/questions/58811999/what-he-the-uses-of-morphscolumn-type-in-laravel
[9] https://Laraveldaily.com/post/Laravel-Polymorphic-Many-to-many-get-all-Relate-Records