Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kako se Morphtomany razlikuje od MorphedBymanyja glede na strukturo baze podatkov


Kako se Morphtomany razlikuje od MorphedBymanyja glede na strukturo baze podatkov


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/