Vzťah „Morphtomany“ v Laravel sa používa na definovanie polymorfných vzťahov s mnohými k človeku, kde viaceré modely môžu zdieľať vzťah s jediným typom modelu prostredníctvom polymorfnej medziproduktu. To umožňuje flexibilné spojenie mnohých rôznych modelov k spoločnému modelu bez toho, aby bolo potrebné pre každý pár modelu samostatné otočné tabuľky.
Bežné prípady použitia pre `Morphtomany` v Laravele
** 1. Označenie
Jedným z najbežnejších prípadov použitia je implementácia systému označovania, v ktorom je možné označiť viac rôznych modelov (napr. Príspevky, videá, stránky) označených rovnakými značkami. Namiesto samostatných otočných tabuliek pre každý vzťah modelu TAG umožňuje `Morphtomany` uložiť všetky značky v jednej tabuľke„ značiek “a súvisiacich polymorficky s akýmkoľvek modelom.
Napríklad modely `Post` a` Video` môžu mať metódu `tags ()` pomocou `Morphtomany` na načítanie značiek a model` tag` môže použiť „MorphedByMany` na získanie všetkých príspevkov alebo videí označených s ňou [1] [5] [9].
** 2. Kategorizácia rôznych typov obsahu
Podobne ako v prípade značiek je možné kategórie zdieľať v rôznych typoch obsahu. Napríklad, možno bude potrebné kategorizovať články aj výrobky a polymorfný vzťah s mnohými do ľudstva im umožňuje zdieľať kategórie bez redundantných tabuliek.
** 3. Priradenie štítkov alebo atribútov viacerým modelom
Ak máte štítky, atribúty alebo funkcie, ktoré sa môžu vzťahovať na rôzne modely (napr. Používatelia, objednávky, produkty), pomocou „Morphtomany“ vám umožní flexibilne priradiť tieto štítky s akýmkoľvek typom modelu.
** 4. Roly používateľa alebo povolenia vo viacerých typoch používateľov
V aplikáciách s viacerými typmi používateľov (napr. Správca, zákazníka, dodávateľa), úloh alebo povolení je možné priradiť polymorficky pomocou `Morphtomany`, takže úlohy sú spravované v jednej tabuľke, ale súvisia s rôznymi užívateľskými modelmi [1].
** 5. Prepojenie komentárov alebo príloh s viacerými modelmi mnohým k mnohým spôsobom
Aj keď sú komentáre často polymorfné jednorazové, môžu existovať scenáre, v ktorých sa viac komentárov alebo príloh vzťahuje na viacero modelov mnohými k mnohým spôsobom. „Morphtomany“ sa dá použiť na modelovanie takýchto vzťahov.
Ako funguje `Morphtomany`
- Používa jednu stolovú tabuľku, napr. `TagGables`, so stĺpcami pre` tag_id`, `tagGable_id` a` tagGable_type`.
- stĺpce `tagGable_id` a` taggable_type` umožňujú laravelu určiť, s ktorým modelom je značka spojená.
- Na súvisiacich modeloch (napr. `Post`,` Video`) definujete metódu, ktorá vracia `$ this-> morftomany (tag :: class, 'taggable')`.
- Na modeli `tag` definujete inverzné vzťahy pomocou` Morfedbymany` na získanie všetkých modelov daného typu spojeného s touto značkou [1] [5].
Zhrnutie
„Morphtomany“ je ideálny, keď chcete priradiť viacero modelov s spoločným modelom mnohým polymorfným spôsobom. Všeobecne sa používa na označovanie systémov, kategorizáciu, priradenie rolí vo viacerých typoch používateľov a akýkoľvek scenár, v ktorom mnoho rôznych modelov zdieľa spoločnú sadu súvisiacich modelov bez toho, aby bolo potrebné pre každý pár samostatné otočné tabuľky.
Tento prístup zjednodušuje návrh databázy a údržbu kódu centralizáciou polymorfných vzťahov mnohých k človeku do jednej elegantnej štruktúry.
Citácie:
[1] https://blog.logoclect.com/polymorfic-relationships-laravel/
[2] https://laravaldAily.com/post/polymorfic-relations-laravel-open-source-exples
[3] https://stackoverflow.com/questions/57522923/how-to-use-morphtomany
[4] https://stackoverflow.com/questions/43285779/laravel-polymorfic-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-polymorfic-relationships
[8] https://stackoverflow.com/questions/58811999/what-are-the-the-uses-ound-morphs-column-type-in-in-laravel
[9] https://laravaldAily.com/post/laravel-polymorphic-many-many-many-get-all-llated-ecords