Rozdiel medzi „morftomany`“ a „morfedbymany“ v polymorfných vzťahoch Laravel polymorfy spočíva predovšetkým vo svojich úlohách vo vzťahu a spôsobe, akým ich podporuje štruktúra databázy.
Databázová štruktúra v polymorfnom mnohých
Polymorfné vzťahy s mnohými k mnohým zahŕňajú tri hlavné tabuľky:
- Dve modelové tabuľky (napr. „Príspevky“ a `tags`)
- Jedna medziprodukt Pivot Tabuľka (napr. `Taggables`)
Tabuľka Pivot obsahuje najmenej tri stĺpce:
- `tag_id` (ID súvisiaceho modelu, napr. TAG)
- `taggable_id` (ID modelu, ktorý súvisí so značkou, napr. Príspevok alebo video)
- `taggable_type` (názov triedy alebo typ súvisiaceho modelu, napr.,` App \ Models \ Post` alebo `App \ Models \ Video`)
Táto štruktúra umožňuje jednej otočnej tabuľke súvisieť s viacerými rôznymi modelmi so spoločným modelom (v tomto prípade značky) bez toho, aby bolo potrebné pre každú kombináciu modelu samostatné otočné tabuľky [5] [9].
úloha `morftomany`"
- Používa sa na model, ktorý „vlastní“ alebo „“ má polymorfný vzťah.
- Definuje vzťah z pohľadu modelu, ktorý súvisí s mnohými ďalšími modelmi.
- Napríklad v modeli `post` metóda` tags () `používa` Morphtomany` na získanie všetkých značiek s týmto príspevkom.
- Táto metóda určuje súvisiaci model a názov „morf“ (napr. `'Taggable'`), ktorý zodpovedá stĺpcom Pivot Table (` taggable_id` a `tagGable_type`).
- Dopytá filtrovanie otočnej tabuľky pomocou ID a typu súčasného modelu, aby ste našli súvisiace modely [5] [9].
úloha `Morfedbymany`"
- Používa sa na model, ktorý je cieľom polymorfného vzťahu.
-Definuje inverznú stránku polymorfného vzťahu s mnohými k dispozícii.
- Napríklad v modeli `tag` metódy ako` Post () `alebo` Videos () `Použite` MorfedBymany` na získanie všetkých príspevkov alebo videí s touto značkou.
- Určuje súvisiacu modelovú triedu a rovnaký názov morfu, ktorý sa používa v `Morphtomany`.
- Táto metóda dotazala filtrovanie otočnej tabuľky pomocou typu a ID modelu, aby našla všetky modely tohto typu spojeného s aktuálnym modelom (TAG) [5] [9].
Zhrnutie rozdielov v databázových podmienkach
- `Morphtomany` sa vyzýva na model, ktorý súvisí s mnohými ďalšími, a používa stĺpce Pivot Table` tagGable_id` a `tagGable_type` na filtrovanie záznamov, kde` taggable_type` zodpovedá trbe aktuálneho modelu.
- „Morfedbymany“ sa vyzýva na model, ktorý súvisí s (inverzným), a používa otočnú tabuľku na nájdenie všetkých modelov konkrétneho typu, ktorý sa týka súčasného modelu.
Obe metódy používajú rovnakú otočnú tabuľku, ale líšia sa v smere vzťahu, ktorý predstavujú. Tabuľka pivotov zostáva rovnaká, so stĺpcami pre ID a typ súvisiaceho modelu, čo umožňuje polymorficky prepojené viaceré typy modelov cez jednu tabuľku.
V podstate „Morphtomany` definuje vzťah z modelovej strany„ rodičov “alebo„ vlastníctvom “, zatiaľ čo„ Morfedbymany “definuje inverzný vzťah zo strany„ príbuznej “modelu, pričom sa spolieha na rovnakú štruktúru polymorfnej pivotovej tabuľky [5] [1].
Citácie:
[1] https://laracasts.com/discuss/channels/laravel/difference-between-standard-polymorphic-many-to-many-polymorfic
[2] https://www.sitepoint.com/eloquents-polymorphic-relationships-explained/
[3] https://laravaldAily.com/post/laravel-polymorphic-many-many-many-get-all-llated-ecords
[4] https://laracasts.com/discuss/channels/eloquent/polymorphic-many-to-many-reation-tolation-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/simplifosing-many-to-many-relationships-with-laravel-polymorfic-relations
[8] https://stackoverflow.com/questions/68073778/Laravel-polymorphic-many-to-many-many-relationship-pivot-table-with-with-relationship-to--a-a
[9] https://blog.logoclect.com/polymorfic-relationships-laravel/