Razlika med "Morphtomany" in "Morphedbymany" v Laravelovih polimorfnih odnosih, ki jih je več, je predvsem v njihovih vlogah v odnosu in kako jih podpira struktura baze podatkov.
Struktura baze podatkov v polimorfnem številu več kot več
Polimorfna razmerja med več in več kot vključujejo tri glavne tabele:
- Dve modelni tabeli (npr. "Posts" in "oznake")
- ena vmesna vrtilna tabela (npr. "TagGables")
Tabela vrtenja vsebuje vsaj tri stolpce:
- `tag_id` (ID povezanega modela, npr.
- `taggable_id` (ID modela, ki je povezan z oznako, npr. Post ali video)
- `taggable_type` (ime razreda ali vrsta povezanega modela, npr.` app \ modeli \ post` ali `app \ modeli \ video`)
Ta struktura omogoča, da ena sama vrtilna tabela poveže več različnih modelov s skupnim modelom (oznake v tem primeru), ne da bi potrebovali ločene vrtilne tabele za vsako kombinacijo modela [5] [9].
Vloga "Morphtomany"
- Uporablja se na modelu, ki ima v lasti "ali" "polimorfni odnos.
- definira odnos z vidika modela, ki je povezan z mnogimi drugimi modeli.
- Na primer, v modelu `post`, metoda` tags () `uporablja` Morphtomany`, da dobi vse oznake, povezane s to objavo.
- Ta metoda določa povezan model in "ime morf" (npr. `'TagGable'`), ki ustreza stolpcem vrtilne tabele (` tagGable_id` in `tagGable_type`).
- Poizveduje filtriranje vrtilne tabele po ID -ju in vrsti trenutnega modela, da bi našel povezane modele [5] [9].
Vloga "Morphedbymany`
- Uporablja se na modelu, ki je tarča polimorfnega razmerja.
-Določi obratno stran polimorfnega odnosa med številnimi in mnogimi.
- Na primer, v modelu `tag`, metode, kot so` posts () `ali` videos () `, uporabite` MorphedBymany`, da dobite vse objave ali videoposnetke, povezane s to oznako.
- Določi sorodni model razreda in isto ime Morph, ki se uporablja v "Morphtomany".
- Ta metoda poizveduje filtriranje vrtilne tabele po tipu in ID -ju sorodnega modela, da poišče vse modele te vrste, povezane s trenutnim modelom (TAG) [5] [9].
Povzetek razlik v pogojih baze podatkov
- "Morphtomany" je poklicana na model, ki je povezan z mnogimi drugimi, in uporablja stolpce vrtilne tabele "tagGable_id` in` tagGable_type "za filtriranje zapisov, kjer se" tagGable_type` ujema s trenutnim modelom.
- "Morphedbymany" je poklican na model, ki je povezan z (inverzno), in uporablja vrtilno tabelo, da najde vse modele določene vrste, ki se nanašajo nazaj na trenutni model.
Obe metodi uporabljata isto vrtilno tabelo, vendar se razlikujeta v smeri odnosa, ki ga predstavljajo. Tabela vrtenja ostaja enaka, s stolpci za ID in vrsto povezanega modela, kar omogoča, da se več vrst modela polimorfno poveže skozi eno tabelo.
V bistvu `Morphtomany` definira odnos z" nadrejenega "ali" lastniškega "modela, medtem ko" Morphedbymany "definira inverzno razmerje z" povezane "strani modela, ki se zanaša na isto polimorfno strukturo vrtilne tabele [5] [9] [1].
Navedbe:
[1] https://laracasts.com/discuss/channels/laravel/difference-betwend-standard-polimorph-many-to-many-polimorfna
[2] https://www.sitepoint.com/eloquents-polimorphic-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-relationships
[6] https://docs.octobercms.com/3.x/Extend/database/relations.html
[7] https://simple-code.agency/blog/development/simplificific-many-to-many-relationships-with-lavel-polimorfna-relations
[8] https://stackoverflow.com/Questions/68073778/laravel-polymorph-many-to-mony-relationship-pivot-table-with-relationship-to-a
[9] https://blog.logrocket.com/polymorphic-relationships-laravel/