Forholdet i 'Morphtomany' i Laravel bruges til at definere mange-til-mange polymorfe forhold, hvor flere modeller kan dele et forhold til en enkelt modeltype gennem en polymorf mellemtabel. Dette tillader en fleksibel forening af mange forskellige modeller til en fælles model uden at have brug for separate drejeborde for hvert modelpar.
Almindelige brugssager til `Morphtomany 'i Laravel
** 1. Mærkningssystemer
En af de mest almindelige anvendelsessager er at implementere et tagging -system, hvor flere forskellige modeller (f.eks. Indlæg, videoer, sider) kan mærkes med de samme tags. I stedet for at have separate drejeborde for hvert model-tag-forhold, tillader 'Morphtomany' alle tags at blive gemt i et enkelt "tags" -tabel og tilhørende polymorf med enhver model.
For eksempel kan både 'post' og 'Video' modeller have en 'tags ()' metode ved hjælp af 'Morphtomany' til at hente tags, og 'Tag' -modellen kan bruge 'MorphedByMymory' til at få alle indlæg eller videoer mærket med den [1] [5] [9].
** 2. Kategorisering af forskellige indholdstyper
I lighed med tags kan kategorier deles på tværs af forskellige indholdstyper. For eksempel kan både artikler og produkter muligvis kategoriseres, og en polymorf mange-til-mange-relation giver dem mulighed for at dele kategorier uden overflødige borde.
** 3. Tildeling af etiketter eller attributter til flere modeller
Hvis du har etiketter, attributter eller funktioner, der kan gælde for forskellige modeller (f.eks. Brugere, ordrer, produkter), ved hjælp af `Morphtomany 'giver dig mulighed for at knytte disse etiketter fleksibelt til enhver modeltype.
** 4. Brugerroller eller tilladelser på tværs af flere brugertyper
I applikationer med flere brugertyper (f.eks. Administrator, kunde, leverandør), roller eller tilladelser kan tildeles polymorfisk ved hjælp af `Morphtomany ', så roller styres i en enkelt tabel, men relateres til forskellige brugermodeller [1].
** 5. At forbinde kommentarer eller vedhæftede filer til flere modeller på en mange-til-mange måde
Mens kommentarer ofte er en-til-mange polymorfe, kan der være scenarier, hvor flere kommentarer eller vedhæftede filer vedrører flere modeller på en mange-til-mange måde. `Morphtomany` kan bruges til at modellere sådanne forhold.
Hvordan 'Morphtomany' fungerer
- Den bruger en enkelt drejebord, f.eks. `Taggables`, med kolonner til` tag_id`, `taggable_id` og` taggable_type`.
- 'Taggable_ID' og 'Taggable_Type` -kolonerne giver Laravel mulighed for at bestemme, hvilken model tagget der er forbundet med.
- På de relaterede modeller (f.eks. 'Post', 'Video'), definerer du en metode, der returnerer '$ this-> morphtomany (Tag :: klasse,' taggable ')'.
- På `Tag` -modellen definerer du omvendte forhold ved hjælp af` MorphedByMymory 'for at hente alle modeller af en given type, der er knyttet til dette tag [1] [5].
SAMMENDRAG
`Morphtomany` er ideel, når du vil knytte flere modeller til en fælles model på en mange-til-mange polymorf. Det er vidt brugt til mærkningssystemer, kategorisering, rolletildeling på tværs af flere brugertyper og ethvert scenario, hvor mange forskellige modeller deler et fælles sæt relaterede modeller uden at have brug for separate drejeborde for hvert par.
Denne tilgang forenkler databasedesign og kodevedligeholdelse ved at centralisere polymorf mange-til-mange-forhold til en enkelt, elegant struktur.
Citater:
[1] https://blog.logrocket.com/polymorphic-relationships-laravel/
[2] https://laraveldaily.com/post/polymorphic-relations-laravel-open-source-example
[3] https://stackoverflow.com/questions/57522923/How-to-Ran-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-anse-case-for-laravels-polymorphic-relationships
[8] https://stackoverflow.com/questions/58811999/what-are-the-suses-of-morphs-column-type-in-laravel
[9] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all-related-records