Förhållandet "Morphtomany" i Laravel används för att definiera många-till-många polymorfa förhållanden, där flera modeller kan dela en relation med en enda modelltyp genom en polymorf mellanliggande tabell. Detta möjliggör en flexibel förening av många olika modeller till en gemensam modell utan att behöva separata pivottabeller för varje modellpar.
Vanliga användningsfall för `Morphtomany 'i Laravel
** 1. Taggsystem
Ett av de vanligaste fallen är att implementera ett taggningssystem där flera olika modeller (t.ex. inlägg, videor, sidor) kan taggas med samma taggar. Istället för att ha separata pivottabeller för varje modell-tag-relation, tillåter "Morphtomany" att alla taggar lagras i en enda "taggar" -tabell och associeras polymorfiskt med någon modell.
Till exempel kan både "post" och "video" -modeller ha en "taggar ()" -metoden med hjälp av "morphtomany" för att hämta taggar, och "tag" -modellen kan använda "morpedbyMany" för att få alla inlägg eller videor taggade med den [1] [5] [9].
** 2. Kategorisera olika innehållstyper
I likhet med taggar kan kategorier delas över olika innehållstyper. Till exempel kan både artiklar och produkter behöva kategoriseras, och en polymorfa många-till-många-relation gör att de kan dela kategorier utan redundanta tabeller.
** 3. Tilldela etiketter eller attribut till flera modeller
Om du har etiketter, attribut eller funktioner som kan gälla för olika modeller (t.ex. användare, beställningar, produkter), med hjälp av "Morphtomany" kan du koppla dessa etiketter flexibelt med vilken modelltyp som helst.
** 4. Användarroller eller behörigheter över flera användartyper
I applikationer med flera användartyper (t.ex. administratör, kund, leverantör), kan roller eller behörigheter tilldelas polymorfiskt med hjälp av `Morphtomany 'så att roller hanteras i en enda tabell men relaterade till olika användarmodeller [1].
** 5. Länka kommentarer eller bilagor till flera modeller på ett många-till-många-sätt
Medan kommentarer ofta är en-till-många polymorfa, kan det finnas scenarier där flera kommentarer eller bilagor hänför sig till flera modeller på ett många-till-många sätt. "Morphtomany" kan användas för att modellera sådana förhållanden.
Hur `Morphtomany 'fungerar
- Den använder en enda pivottabell, t.ex. `taggables`, med kolumner för` tag_id`, `taggable_id` och` taggable_type`.
- kolumnerna `taggable_id` och` taggable_type` tillåter Laravel att bestämma vilken modell taggen är associerad med.
- På de relaterade modellerna (t.ex. `Post ',` video') definierar du en metod som returnerar `$ this-> morphtomany (tag :: klass, 'taggable').
- På "TAG" -modellen definierar du omvända relationer med hjälp av "MorpedbyMany" för att hämta alla modeller av en given typ associerad med den taggen [1] [5].
Sammanfattning
"Morphtomany" är idealisk när du vill associera flera modeller med en gemensam modell på ett många-till-många polymorfiska sätt. Det används allmänt för taggningssystem, kategorisering, rolltilldelning mellan flera användartyper och alla scenarier där många olika modeller delar en gemensam uppsättning relaterade modeller utan att behöva separata pivottabeller för varje par.
Denna metod förenklar databasdesign och kodunderhåll genom att centralisera polymorfa många-till-många-relationer till en enda, elegant struktur.
Citeringar:
[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-ase-for-laravels-polymorphic-relationships
]
[9] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all-related-records