Relația „morftomanii” în Laravel este utilizată pentru a defini relațiile polimorfe multiple la mulți, unde mai multe modele pot împărtăși o relație cu un singur tip de model printr-un tabel intermediar polimorf. Acest lucru permite o asociere flexibilă a multor modele diferite la un model comun, fără a avea nevoie de tabele pivot separate pentru fiecare pereche de model.
cazuri de utilizare comună pentru `morftomanie` în Laravel
** 1. Sisteme de etichetare
Unul dintre cele mai frecvente cazuri de utilizare este implementarea unui sistem de etichetare în care mai multe modele diferite (de exemplu, postări, videoclipuri, pagini) pot fi etichetate cu aceleași etichete. În loc să aveți tabele pivot separate pentru fiecare relație model-tag, `Morphtomany` permite stocarea tuturor etichetelor într-un singur tabel` Tags` și asociat polimorfic cu orice model.
De exemplu, atât modelele `POST`, cât și` video` pot avea o metodă `etichete ()` folosind `morphtomany` pentru a prelua etichete, iar modelul` tag` poate folosi `morphedbymany` pentru a obține toate postările sau videoclipurile etichetate cu acesta [1] [5] [9].
** 2. Clasificarea diferitelor tipuri de conținut
Similar cu etichetele, categoriile pot fi partajate pe diferite tipuri de conținut. De exemplu, atât articolele, cât și produsele ar putea fi necesare, iar o relație polimorfe de la multe la mulți le permite să partajeze categorii fără tabele redundante.
** 3. Alocarea etichetelor sau atributelor mai multor modele
Dacă aveți etichete, atribute sau caracteristici care se pot aplica la diferite modele (de exemplu, utilizatori, comenzi, produse), utilizarea „Morphtomany” vă permite să asociați aceste etichete flexibil cu orice tip de model.
** 4. Roluri sau permisiuni de utilizator pe mai multe tipuri de utilizatori
În aplicațiile cu mai multe tipuri de utilizatori (de exemplu, admin, client, furnizor), rolurile sau permisiunile pot fi atribuite polimorf folosind „morftomanii”, astfel încât rolurile să fie gestionate într -un singur tabel, dar legate de diferite modele de utilizator [1].
** 5. Conectarea comentariilor sau atașamentelor la mai multe modele într-o manieră multor la mulți
În timp ce comentariile sunt adesea polimorfe unu-la-many, ar putea exista scenarii în care mai multe comentarii sau atașamente se referă la mai multe modele într-un mod multor la mulți. `Morftomania 'poate fi folosită pentru a modela astfel de relații.
Cum funcționează Morphtomany`
- Folosește un singur tabel pivot, de exemplu, `taggables`, cu coloane pentru` tag_id`, `taggable_id` și` taggable_type`.
- Coloanele `taggable_id` și` taggable_type` permit Laravel să stabilească cu ce model este asociat cu eticheta.
- Pe modelele conexe (de exemplu, `post`,` video`), definiți o metodă care returnează `$ this-> morphtomany (tag :: class, 'taggable')`.
- Pe modelul `tag`, definiți relații inverse folosind` morphedbymany` pentru a prelua toate modelele de un tip dat asociate cu acea etichetă [1] [5].
Rezumat
`Morphtomany` este ideal atunci când doriți să asociați mai multe modele cu un model comun într-o manieră polimorfe multor la mulți. Este utilizat pe scară largă pentru etichetarea sistemelor, categorizarea, atribuirea rolurilor pe mai multe tipuri de utilizatori și orice scenariu în care multe modele diferite partajează un set comun de modele conexe, fără a avea nevoie de tabele pivot separate pentru fiecare pereche.
Această abordare simplifică proiectarea bazei de date și întreținerea codului prin centralizarea relațiilor polimorfe multor-la-many într-o singură structură elegantă.
Citări:
[1] https://blog.logrocket.com/polimorfic-relationships-laravel/
[2] https://laveldaily.com/post/polimorphic-relations-lravel-open-source-examples
[3] https://stackoverflow.com/questions/57522923/how-to-use-morphtomany
[4] https://stackoverflow.com/questions/43285779/laravel-polimorphic-relations-has-many-hrough
[5] https://laravel.com/docs/11.x/eloquent-relationships
[6] https://www.linkedin.com/pulse/complete-guide-polimorphic-relationships-morphs-sajith-madhubashana-rk1xc
[7] https://joedixon.co.uk/a-practical-use-case-for-laravels-polimorfic-relations
[8] https://stackoverflow.com/questions/58811999/what-are-the-uses-of-morphs-olumn-ype-inravel
[9] https://laveldaily.com/post/lavel-polimorphic-many-to-many-get-all-record-records