Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kuo morftomanija skiriasi nuo „Morphedbymany“, atsižvelgiant į duomenų bazės struktūrą


Kuo morftomanija skiriasi nuo „Morphedbymany“, atsižvelgiant į duomenų bazės struktūrą


Skirtumas tarp „morftomany“ ir „morphedbymany“ Laravelo polimorfinių santykių „Morphedbymany“ pirmiausia yra jų vaidmenys santykiuose ir kaip duomenų bazės struktūra juos palaiko.

Duomenų bazės struktūra polimorfinėje

Polimorfiniai santykiai yra trys pagrindinės lentelės:

- Dvi modelio lentelės (pvz., „Posts“ ir „Tags“)
- Viena tarpinė šerdies lentelė (pvz., „Taggables“)

„Pivot“ lentelėje yra bent trys stulpeliai:

- „Tag_ID“ (susijusio modelio ID, pvz., Tag)
- „Taggable_ID“ (modelio, susijusio su žyma, pvz., Post ar vaizdo įrašas) ID)
- „Taggable_type“ (susijusio modelio klasės pavadinimas arba tipas, pvz.

Ši struktūra leidžia vienai šarnyrinei lentelei susieti kelis skirtingus modelius su bendru modeliu (žymomis šiuo atveju), nereikia atskirų pasukamųjų lentelių kiekvienam modelio deriniui [5] [9].

„Morphtomany“ vaidmuo

- Naudojamas pagal modelį, kuris „priklauso“ arba „turi“ polimorfinį ryšį.
- Apibrėžia ryšį iš modelio, susijusio su daugeliu kitų modelių, perspektyvos.
- Pavyzdžiui, modelyje „Post“ modelyje „Tags ()“ metodas naudoja „morftomany“, kad su tuo įrašu būtų susietas visas žymas.
- Šis metodas nurodo susijusį modelį ir „morfų pavadinimą“ (pvz., „Taggable“), kuris atitinka „Pivot“ lentelės stulpelius (`taggable_id` ir` taggable_type`).
- Tai klausia „Pivot“ lentelės filtravimo pagal dabartinio modelio ID ir tipą, kad rastų susijusius modelius [5] [9].

„Morphedbymany“ vaidmuo

- Naudojamas pagal modelį, kuris yra polimorfinio ryšio taikinys.
-Apibrėžia atvirkštinę polimorfinio santykio pusę.
- Pvz., „Tag“ modelyje, tokie metodai, tokie kaip „įrašai ()“ arba „vaizdo įrašai ()` „Morphedbymany“ naudokite „morphedbymany“, kad gautumėte visus įrašus ar vaizdo įrašus, susietas su ta žyma.
- Tai nurodo susijusią modelio klasę ir tą patį morfo pavadinimą, naudojamą „Morphtomany“.
- Šis metodas klausia sujungimo lentelės filtravimo pagal susijusio modelio tipą ir ID, kad surastų visus tokio tipo modelius, susijusius su dabartiniu modeliu (TAG) [5] [9].

Duomenų bazės skirtumų santrauka

- „Morphtomany“ yra iškviestas į modelį, kuris yra susijęs su daugeliu kitų, ir jis naudoja „Pivot“ lentelės stulpelius „taggable_id“ ir „taggable_type“, kad filtruotų įrašus, kuriuose „taggable_type“ atitinka dabartinio modelio klasę.
- „Morphedbymany“ yra iškviestas į modelį, kuris yra susijęs su (atvirkštine), ir jis naudoja „Pivot“ lentelę, kad surastų visus konkretaus tipo modelius, susijusius su dabartiniu modeliu.

Abu metodai naudoja tą pačią „Pivot“ lentelę, tačiau skiriasi jų atstovaujamų santykių kryptimi. „Pivot“ lentelė išlieka ta pati - su susijusio modelio ID ir tipo stulpeliais, leidžiančiais kelis modelio tipus susieti polimorfiškai per vieną lentelę.

Iš esmės „morftomany“ apibūdina „tėvų“ santykį arba „turi“ modelio pusę, o „Morphedbymany“ apibrėžia atvirkštinį ryšį iš „susijusios“ modelio pusės, abu remiasi ta pačia polimorfinės pasukimo lentelės struktūra [5] [9] [1].

Citatos:
[1] https://laracasts.com/discuss/channels/laravel/difference-between-sandard-polymorphic--many-to--many-polimorfinis
[2] https://www.sitepoint.com/eloquents-polymorphic-relationships-sexplange/
[3] https://laraveldaily.com/post/laravel-polymorphic- Many-to-many-get-all-reliated-records
[4] https://laracasts.com/discuss/channels/eloquent/polimorphic-many-to-many-treliation-to-multiple-models
[5] https://laravel.com/docs/11.x/eloquent-trationshipships
[6] https://docs.octobercms.com/3.x/extend/database/relations.html
[7] https://simple-code.agency/blog/development/simplifying-many-to-any-reshipships-with-laravel-polimorfiniai-reliacijos
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic- Many-to-thy-relationship-pivot-table-with--reliation---- a
[9] https://blog.logrocket.com/polimorfiniai-Relationshipshlavel/