A „Morphtomany” kapcsolatot a Laravel-ben használják a sok-sok polimorf kapcsolatok meghatározására, ahol több modell megoszthatja az egyetlen modelltípussal való kapcsolatot egy polimorf közbenső táblázaton keresztül. Ez lehetővé teszi sok különböző modell rugalmas társulását egy közös modellhez anélkül, hogy külön forgóasztalokra lenne szükség az egyes modellpárokhoz.
Általános felhasználási esetek a „morftomany” esetében Laravelben
** 1. Címkézési rendszerek
Az egyik leggyakoribb felhasználási eset egy olyan címkézési rendszer bevezetése, ahol több különböző modell (például hozzászólások, videók, oldalak) ugyanazokkal a címkékkel címkézhető. Ahelyett, hogy minden modell-címkézési kapcsolathoz külön forgóasztal lenne, a „Morphtomany” lehetővé teszi, hogy az összes címkét egyetlen „címkék” táblában tárolhassák, és bármelyik modellhez polimorfikusan társítsák.
Például, mind a „Post”, mind a „Video” modellek rendelkezhetnek egy „Tags ()` módszerrel a „Morphtomany” használatával a címkék lekéréséhez, és a „Tag` modell használhatja a„ MorphedbyMany ”-ot az összes hozzászólás vagy videó címkével címkézve [1] [5] [9].
** 2. Különböző tartalomtípusok kategorizálása
A címkékhez hasonlóan a kategóriák megoszthatók a különböző tartalomtípusok között. Például mind a cikkeket, mind a termékeket kategorizálni kell, és a sok-sok-sok reláció lehetővé teszi számukra a kategóriák megosztását redundáns asztalok nélkül.
** 3. Címkék vagy attribútumok több modellhez történő hozzárendelése
Ha olyan címkék, attribútumok vagy funkciók vannak, amelyek alkalmazhatók a különböző modellekre (például felhasználók, megrendelések, termékek), akkor a „Morphtomany” használatával lehetővé teszik, hogy ezeket a címkéket rugalmasan társítsa bármilyen modelltípushoz.
** 4. Felhasználói szerepek vagy engedélyek több felhasználói típuson belül
A több felhasználói típusú alkalmazásokban (például adminisztrátor, ügyfél, eladó) a szerepeket vagy engedélyeket polimorfikusan hozzárendelhetik a „morftomany” alkalmazásával, hogy a szerepeket egyetlen táblázatban kezeljék, de a különböző felhasználói modellekhez kapcsolódnak [1].
** 5. A megjegyzések vagy mellékletek összekapcsolása több-sok-sokféle módon
Míg a megjegyzések gyakran egy-egy-sok polimorf, lehetnek olyan forgatókönyvek, amikor több megjegyzés vagy melléklet több modellhez kapcsolódik. A „Morphtomany” felhasználható az ilyen kapcsolatok modellezésére.
Hogyan működik a `Morphtomany`
- Egyetlen pivot táblát használ, például `Taggables`, oszlopokkal a` tag_id`, `taggable_id` és a` taggage_type` számára.
- A `TagGable_id` és a` TagGable_type` oszlopok lehetővé teszik a Laravel meghatározását, hogy melyik modellhez van társítva.
- A kapcsolódó modelleken (például a „post”, `video”) egy olyan módszert definiál, amely a „$ this-> morphtomany (címke :: class,„ címkabable ”) értéket adja vissza.
- A „Tag` modellen az inverz kapcsolatokat a„ morphedbymany ”használatával határozza meg, hogy az adott típushoz kapcsolódó összes modellt kapjon [1] [5].
Összegzés
A „Morphtomany” ideális, ha több modellt szeretne társítani egy közös modellhez, sok-sok polimorf módon. Széles körben használják a rendszerek címkézéséhez, a kategorizáláshoz, a szerepek hozzárendeléséhez több felhasználói típuson belül, és minden olyan forgatókönyvhez, ahol sok különböző modell megosztja a kapcsolódó modelleket anélkül, hogy minden párhoz külön pivot táblákra lenne szükség.
Ez a megközelítés leegyszerűsíti az adatbázis-tervezést és a kódkarbantartást azáltal, hogy a sok-sok-sok kapcsolatot egyetlen, elegáns struktúrába központosítja.
Idézetek:
[1] https://blog.lockocket.com/polymorphic-reelationships-laravel/
[2] https://laraveldaily.com/post/polymorph-welations-laravel-open-source-examples
[3] https://stackoverflow.com/questions/57522923/how-to-use-morphtomany
[4] https://stackoverflow.com/questions/43285779/laravel-polymorph-welations-has-many-through
[5] https://laravel.com/docs/11.x/eloquent-reatationships
[6] https://www.linkedin.com/pulse/complete-guide-polymorph-recleations-morphs-sajith-madhubashana-rk1xc
[7] https://joedixon.co.uk/a-practical-use-case-for-laratels-polymorph-kapcsolatok
[8] https://stackoverflow.com/questions/58811999/what-e-the-uses-of-morphs-column-ype-in-laravel
[9] https://laraveldaily.com/post/laravel-polymorphic-any-to-many-get-all-related-records