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/