Ero `morphtomany` ja` morfedbymany` välillä Laravel-polymorfisissa monissa suhteissa on ensisijaisesti niiden roolissa suhteessa ja kuinka tietokannan rakenne tukee niitä.
Tietokannan rakenne polymorfisessa monella monesta
Polymorfisiin moniin moniin suhteisiin liittyy kolme päätaulua:
- Kaksi mallitaulua (esim. "Viestit" ja `Tags`)
- Yksi välituotetaulukko (esim. "Taggables`)
Pivot -taulukko sisältää vähintään kolme saraketta:
- `Tag_id` (Aiheeseen liittyvän mallin tunnus, esim. Tag)
- `Taggable_id` (tunnisteeseen liittyvän mallin tunnus, esim. Posti tai video)
- `Taggable_Type` (Aiheeseen liittyvän mallin luokan nimi tai tyyppi, esim.` App \ mallit \ Post` tai `App \ mallit \ Video`)
Tämä rakenne antaa yhden kääntötaulukon yhdistää useita erilaisia malleja yhteiseen malliin (tässä tapauksessa tunnisteet) tarvitsematta erillisiä kääntötaulukoita jokaiselle malliyhdistelmälle [5] [9].
rooli "morphtomany"
- Käytetään mallissa, joka "omistaa" tai "on" polymorfinen suhde.
- Määrittelee suhteen mallin näkökulmasta, joka liittyy moniin muihin malleihin.
- Esimerkiksi `Post` -mallissa` TAGS () `-menetelmä käyttää` morphtoMany 'saadaksesi kaikki tähän viestiin liittyvät tunnisteet.
- Tämä menetelmä määrittelee liittyvän mallin ja "morph -nimen" (esim. `'Taggable'`), joka vastaa kääntötaulukon sarakkeita (` taggable_id` ja `taggable_type`).
- Se kysyy kääntötaulukon suodattamista nykyisen mallin tunnuksen ja tyypin avulla löytääkseen niihin liittyviä malleja [5] [9].
"morfedbymany" rooli
- Käytetään mallissa, joka on polymorfisen suhteen kohde.
-Määrittelee polymorfisen monien välisen suhteen käänteisen puolen.
- Esimerkiksi `Tag` -mallissa menetelmät, kuten` viestit () `tai` videoita ()) `käytä` morfedbymany 'saadaksesi kaikki tähän tunnisteeseen liittyvät viestit tai videot.
- Se määrittelee siihen liittyvän malliluokan ja saman morfin nimen, jota käytetään `morphtomany`.
- Tämä menetelmä kysyy kääntötaulukon suodattamista liittyvän mallin tyypin ja ID: n avulla löytääkseen kaikki nykyiseen malliin liittyvät mallit (tag) [5] [9].
Yhteenveto tietokantatermejen eroista
- `morphtomany` kutsutaan malliin, joka liittyy moniin muihin, ja se käyttää kääntötaulukon sarakkeita` TAGGABLE_ID` ja `taggable_type` suodattaaksesi tietueita, joissa` Taggable_type` vastaa nykyisen mallin luokkaa.
- `morfedbymany` kutsutaan malliin, joka liittyy (käänteiseen), ja se käyttää kääntötaulua löytääkseen kaikki tietyn tyyppiset mallit, jotka liittyvät nykyiseen malliin.
Molemmat menetelmät käyttävät samaa kääntötaulua, mutta eroavat heidän edustamansa suhteen suunnasta. Pivot -taulukko pysyy samana, ja sarakkeet liittyvän mallin tunnuksen ja tyypin kanssa, jolloin useita mallityyppejä voidaan linkittää polymorfisesti yhden taulukon läpi.
Pohjimmiltaan "Morphtomany" määrittelee suhteen "vanhemmasta" tai "omistamisesta" mallipuolelta, kun taas "morfedbymany" määrittelee käänteisen suhteen "liittyvästä" mallipuolelta, molemmat luottavat samaan polymorfiseen kääntötaulukon rakenteeseen [5] [9] [1].
Viittaukset:
.
[2] https://www.sitepoint.com/eloquents-polymorphic-relationships-explained/
[3] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all-related-records
[4] https://laracasts.com/discuss/channels/eloquent/polymorphic-many-to-many-relation-to-multiple-models
[5] https://laravel.com/docs/11.x/eloquent-relationshipshipship
[6] https://docs.octobercms.com/3.x/extend/database/relations.html
[7] https://simple-code.agency/blog/development/simplifying-many-to-many-relaatiot
.
.