Vztah „morphtomany“ v Laravelu se používá k definování mnoha polymorfních vztahů na mnoho, kde může více modelů sdílet vztah s jediným typem modelu prostřednictvím polymorfní meziproduktu. To umožňuje flexibilní asociaci mnoha různých modelů k společnému modelu, aniž by pro každý pár modelů bylo nutné samostatné otočné tabulky.
Společné případy použití pro „morphtomany“ v Laravelu
** 1. Systémy značkování
Jedním z nejběžnějších případů použití je implementace systému značení, kde lze označit více různých modelů (např. Příspěvky, videa, stránky) se stejnými značkami. Namísto samostatných otočných tabulek pro každý vztah modelu-tag, „MorphTomany“ umožňuje ukládat všechny značky v jediné tabulce „Tags“ a přidružené polymorficky s jakýmkoli modelem.
Například modely `post` i„ video “mohou mít metodu„ Tags () “pomocí` MorphTomany “k načtení značek a model„ tag “může použít„ morphedBymany “, aby s ní získal všechny příspěvky nebo videa [1] [5] [9].
** 2. Kategorizace různých typů obsahu
Podobně jako u značek lze kategorie sdílet napříč různými typy obsahu. Například může být nutné kategorizovat články i produkty a polymorfní vztah mnoho na mnoho jim umožňuje sdílet kategorie bez redundantních tabulek.
** 3. Přiřazení štítků nebo atributů k více modelům
Pokud máte štítky, atributy nebo funkce, které se mohou vztahovat na různé modely (např. Uživatelé, objednávky, produkty), používání „MorphTomany` vám umožní tyto štítky flexibilně spojit s jakýmkoli typem modelu.
** 4. Uživatelské role nebo oprávnění napříč více typy uživatelů
V aplikacích s více typy uživatelů (např. Správce, zákazníka, prodejcem), rolemi nebo oprávněními lze polymorfně přiřadit pomocí „morphtomany“, takže role jsou spravovány v jedné tabulce, ale související s různými uživatelskými modely [1].
** 5. Propojení komentářů nebo připoutání k více modelům v mnoha
Zatímco komentáře jsou často jednorázové polymorfní, mohly by existovat scénáře, kde se více komentářů nebo příloh týká více modelů mnoha-to-lidským způsobem. `MorphTomany lze použít k modelování takových vztahů.
Jak funguje „morphtomany“
- Používá jedinou tabulku Pivot, např. „TagGables“, se sloupci pro `tag_id`,` taggable_id` a `taggable_type`.
- sloupce `taggable_id` a` taggable_type` umožňují Laravelu určit, se kterým modelem je značka spojena.
- Na souvisejících modelech (např. `Post`,` video`) definujete metodu, která vrací `$ this-> morphTomany (tag :: třída, 'taggable')`.
- Na modelu `tag` definujete inverzní vztahy pomocí` morphedbymany`, abyste získali všechny modely daného typu spojeného s touto značkou [1] [5].
Shrnutí
`MorphTomany` je ideální, když chcete spojit více modelů s běžným modelem v mnoha polymorfním módě. Je široce používán pro systémy značení, kategorizaci, přiřazení rolí napříč více typy uživatelů a jakýkoli scénář, kdy mnoho různých modelů sdílí společnou sadu souvisejících modelů, aniž by pro každý pár potřeboval samostatné otočné tabulky.
Tento přístup zjednodušuje konstrukci a údržbu kódu databáze centralizací polymorfních vztahů s mnoha na mnoho do jediné elegantní struktury.
Citace:
[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-use-case-for-laravels-polymorphic-relationships
[8] https://stackoverflow.com/questions/58811999/what-are-the-uses-of-morphs-column-type-in-laravel
[9] https://laraveldaily.com/post/laravel-polymorfic-many-to-many-get-all-records