Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hogyan különbözik a Morphtomany az adatbázis -struktúra szempontjából a morphedbymany -tól


Hogyan különbözik a Morphtomany az adatbázis -struktúra szempontjából a morphedbymany -tól


A „Morphtomany” és a „Morphedbymany” közötti különbség a Laravel polimorf sok-sok kapcsolatában elsősorban a kapcsolatokban betöltött szerepükben rejlik, és hogy az adatbázis-struktúra hogyan támogatja őket.

Adatbázis-struktúra polimorf sok-sokan

A polimorf sok-sok kapcsolat három fő táblázatot foglal magában:

- Két modelltábla (például a „Posts” és a „Tags”)
- Egy közbenső pivot táblázat (például `Taggables`)

A Pivot táblázat legalább három oszlopot tartalmaz:

- `tag_id` (a kapcsolódó modell azonosítója, például címke)
- `taggage_id` (a címkével kapcsolatos modell azonosítója, például hozzászólás vagy videó)
- `taggage_type` (a kapcsolódó modell osztály neve vagy típusa, például` App \ Models \ Post` vagy `App \ Models \ Video`)

Ez a struktúra lehetővé teszi, hogy egyetlen pivot táblázat több különböző modellt összekapcsoljon egy közös modellhez (ebben az esetben címkék) anélkül, hogy külön forgó táblákra lenne szükség az egyes modellkombinációkhoz [5] [9].

A „Morphtomany” szerepe

- A "tulajdonában" vagy "rendelkezik" a polimorf kapcsolaton.
- A kapcsolatot meghatározza a sok más modellhez kapcsolódó modell szempontjából.
- Például egy „post” modellben a `címkék ()” módszer a „morphtomany” -ot használja az ehhez a bejegyzéshez társított összes címke megszerzéséhez.
- Ez a módszer meghatározza a kapcsolódó modellt és a "morf név" (például: `'Taggable'`), amely megfelel a Pivot Table oszlopoknak (` Taggage_id` és a `TagGable_type`).
- Megkérdezi a Pivot táblázat szűrését az aktuális modell azonosítójával és típusával, hogy megtalálja a kapcsolódó modelleket [5] [9].

A „morphedbymany” szerepe

- A modellre használják, amely a polimorf kapcsolat célpontja.
-Meghatározza a polimorf sok-sok kapcsolat inverz oldalát.
- Például a `Tag` modellben olyan módszerek, mint a„ POSS () `vagy a` Video () `` `MorphedByMany 'használata az összes hozzászólás vagy videó megszerzéséhez.
- Megadja a kapcsolódó modellosztályt és ugyanazt a Morph nevet, amelyet a „Morphtomany” -ban használtak.
- Ez a módszer lekérdezi a Pivot táblázat szűrését a kapcsolódó modell típusával és azonosításával, hogy megtalálja az összes ilyen típusú modellt, amely az aktuális modellhez (TAG) [5] [9].

Az adatbázis -kifejezések különbségeinek összefoglalása

- A „Morphtomany” -et felhívják a sok máshoz kapcsolódó modellre, és a „Taggable_id` és a„ Taggable_type ”pivot táblázatot használja a rekordok kiszűrésére, ahol a` TagGable_Type` megegyezik az aktuális modell osztályával.
- A „MorphedbyMany” -ot felhívják a modellre, amely (inverz) kapcsolódik, és a Pivot táblázatot használja az összes olyan típusú modell megtalálására, amely az aktuális modellhez kapcsolódik.

Mindkét módszer ugyanazt a Pivot táblázatot használja, de különbözik az általuk ábrázolt kapcsolat irányában. A Pivot táblázat változatlan marad, a kapcsolódó modell azonosítójának és típusának oszlopaival, lehetővé téve a több modelltípushoz, hogy polimorfikusan összekapcsolódjon egyetlen táblázaton keresztül.

Lényegében a „Morphtomany” meghatározza a „szülő” vagy a „birtoklás” modell oldalának kapcsolatát, míg a „Morphedbymany` a„ kapcsolódó ”modell oldalról származó inverz kapcsolatot határozza meg, mindkettő ugyanazon polimorf pivot táblázat szerkezetére támaszkodik [5] [1] [1].

Idézetek:
[1] https://laracasts.com/discuss/channels/laravel/difference-betweancentard-polymorphic-many-to-many-polymorfic
[2] https://www.sitepoint.com/eloquents-polymorph- Reelations-explain/
[3] https://laraveldaily.com/post/laravel-polymorphic-any-to-many-get-all-related-records
[4] https://laracasts.com/discuss/channels/eloquent/polymorphic-many-to-many-reelation-to-Multiple-models
[5] https://laravel.com/docs/11.x/eloquent-reatationships
[6] https://docs.octobercms.com/3.x/extend/database/relations.html
[7] https://simple-code.agency/blog/development/simplifiking-many-to-many-reelations-with-laravel-polymorph- Relations
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic-many-to-many-reelationship-wit-with-tationsho-a-a
[9] https://blog.lockocket.com/polymorphic-reelationships-laravel/