Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kateri so pogosti primeri uporabe za morftomanijo v Laravelu


Kateri so pogosti primeri uporabe za morftomanijo v Laravelu


Odnos "Morphtomany" v Laravelu se uporablja za določitev več do več polimorfnih odnosov, kjer lahko več modelov deli odnos z enim modelom s pomočjo polimorfne vmesne tabele. To omogoča prilagodljivo povezavo številnih različnih modelov skupnemu modelu, ne da bi potrebovali ločene vrtilne tabele za vsak par modela.

Primeri skupne uporabe za "Morphtomany" v Laravelu

** 1. Označitveni sistemi
Eden najpogostejših primerov uporabe je izvajanje sistema za označevanje, kjer je mogoče z enakimi oznakami označiti več različnih modelov (npr. Objave, videoposnetkov, strani). Namesto da bi imeli ločene vrtilne tabele za vsak odnos modela oznake, "Morphtomany" omogoča, da se vse oznake shranijo v eno samo tabelo "oznake" in s katerim koli modelom s tem povezane.
Na primer, tako modeli `post` in` video` imajo lahko metodo `tags ()` z uporabo `Morphtomany` za pridobivanje oznak, model` tag` pa lahko uporabi `MorphedBymany`, da dobijo vse objave ali video posnetke, označene z njim [1] [5].

** 2. Razvrščanje različnih vrst vsebin
Podobno kot pri oznakah lahko tudi kategorije delite v različnih vrstah vsebin. Na primer, morda je treba razvrstiti tako članke kot izdelke, polimorfno razmerje med številnimi do večjimi pa jim omogoča, da delijo kategorije brez odvečnih tabel.

** 3. Dodeljevanje nalepk ali atributov več modelom
Če imate nalepke, atribute ali funkcije, ki se lahko uporabljajo za različne modele (npr. Uporabniki, naročila, izdelke), z uporabo `Morphtomany` vam omogoča, da te etikete prožno povezujete s katero koli vrsto modela.

** 4. Uporabniške vloge ali dovoljenja v več vrstah uporabnikov
V aplikacijah z več vrstami uporabnikov (npr. Admin, kupca, prodajalca) lahko vloge ali dovoljenja dodelimo polimorfno s pomočjo `Morphtomany", tako da se vloge upravljajo v eni tabeli, vendar povezane z različnimi uporabniškimi modeli [1].

** 5. Povezovanje komentarjev ali prilog z več modeli na več kot več
Medtem ko so komentarji pogosto eno od mnogih polimorfnih, bi lahko obstajali scenariji, ko se več komentarjev ali prilog na več modelov nanaša na več več kot več. Za modeliranje takšnih odnosov je mogoče uporabiti "Morphtomany".

Kako deluje 'Morphtomany`

- Uporablja eno samo vrtilno tabelo, npr. "TagGables", s stolpci za "tag_id`,` tagGable_id` in `taggable_type`.
- stolpci `taggable_id` in` tagGable_type` omogočajo Laravelu, da določi, s katerim modelom je oznaka povezana.
- Na sorodnih modelih (npr. "Post", "video") določite metodo, ki vrne `$ this-> Morphtomany (tag :: razred, 'taggable')`.
- V modelu `tag` definirate inverzne odnose z` Morphedbymany`, da pridobite vse modele določene vrste, povezane s to oznako [1] [5].

Povzetek

`Morphtomany` je idealen, ko želite več modelov povezati s skupnim modelom na več do večletnega polimorfnega. Široko se uporablja za označevanje sistemov, kategorizacijo, dodelitev vlog v več vrstah uporabnikov in po vsem scenariju, kjer ima veliko različnih modelov skupni nabor povezanih modelov, ne da bi potrebovali ločene vrtilne tabele za vsak par.

Ta pristop poenostavi oblikovanje baze podatkov in vzdrževanje kode s centralizacijo polimorfnih odnosov med več in več v eno, elegantno strukturo.

Navedbe:
[1] https://blog.logrocket.com/polymorphic-relationships-laravel/
[2] https://laraveldaily.com/post/polymorph-relations-lavel-open-source-Examples
[3] https://stackoverflow.com/questions/57522923/how-to-use-morphtomany
[4] https://stackoverflow.com/Questions/43285779/laravel-polimorfna-relations-has-many-through
[5] https://laravel.com/docs/11.x/eloquent-relationships
[6] https://www.linkedin.com/pulse/complete-guide-polymorph-relationships-morphs-sajith-madhubashana-rk1xc
[7] https://joedixon.co.uk/a-practical-use-case-for-lavels-polimorfna relacij
[8] https://stackoverflow.com/questions/58811999/what-are-the-uses-of-morphs-column-type-in-laravel
[9] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-All-related-records