Atšķirība starp `morfomaniju` un“ morfedbymany` Laravel polimorfiskajās attiecībās ar daudzām attiecībām galvenokārt ir viņu loma attiecībās un to, kā datu bāzes struktūra viņus atbalsta.
datu bāzes struktūra polimorfā daudzos no daudziem
Polimorfās daudzās attiecībās ir iesaistītas trīs galvenās tabulas:
- Divas modeļa tabulas (piemēram, "ziņas" un "tagi")
- Viena starpposma šarnīra tabula (piemēram, `taggables`)
Pivot tabulā ir vismaz trīs kolonnas:
- `tag_id` (saistītā modeļa ID, piemēram, tag)
- `taggable_id` (modeļa ID, kas ir saistīts ar tagu, piemēram, ziņu vai video)
- `taggable_type` (saistītā modeļa klases nosaukums vai tips, piemēram,` App \ modeļi \ post` vai `App \ Models \ Video`)
Šī struktūra ļauj vienai šarnīra tabulai saistīt vairākus dažādus modeļus ar kopēju modeli (šajā gadījumā tagi), neprasot atsevišķas šarnīra tabulas katrai modeļa kombinācijai [5] [9].
`morfomany` loma`
- Izmanto modelim, kuram "pieder" vai "ir" polimorfās attiecības.
- definē attiecības no modeļa viedokļa, kas ir saistīts ar daudziem citiem modeļiem.
- Piemēram, modelī "Post" tagi () "metode izmanto` morfomany ", lai iegūtu visas ar šo ziņu saistītās tagus.
- Šī metode norāda saistīto modeli un “morfu vārdu” (piemēram, `'taggable'`), kas atbilst šarnīra tabulas kolonnām (` taggable_id` un `taggable_type`).
- Tas vaicā šarnīra tabulas filtrēšanu pēc pašreizējā modeļa ID un tipa, lai atrastu saistītos modeļus [5] [9].
`morfedbymany` loma`
- Izmanto modelim, kas ir polimorfās attiecību mērķis.
-Definē polimorfās apgrieztā pusi daudzu un daudzu attiecību.
- Piemēram, modelī “Tag` TAG” metodēs, piemēram, `ziņas ()` vai `video ()` Izmantojiet `morfedbymany`, lai iegūtu visas ziņas vai videoklipus, kas saistīti ar šo tagu.
- Tas norāda saistīto modeļa klasi un tādu pašu morfu vārdu, ko izmanto `morfomany".
- Šī metode vaicā šarnīra tabulas filtrēšanu pēc saistītā modeļa veida un ID, lai atrastu visus šāda veida modeļus, kas saistīti ar pašreizējo modeli (TAG) [5] [9].
Atšķirību kopsavilkums datu bāzes izteiksmē
- `Morphtomany` tiek izsaukts uz modeli, kas ir saistīts ar daudziem citiem, un tas izmanto šarnīra tabulas kolonnas` taggable_id` un `taggable_type`, lai filtrētu ierakstus, kur` taggable_type "atbilst pašreizējā modeļa klasei.
- "Morphedbymany" tiek izsaukts uz modeli, kas ir saistīts ar (apgriezto), un tas izmanto šarnīra tabulu, lai atrastu visus konkrēta tipa modeļus, kas attiecas uz pašreizējo modeli.
Abas metodes izmanto vienu un to pašu šarnīra tabulu, bet atšķiras to attiecību virzienā. Pivot tabula paliek nemainīga, ar saistītā modeļa ID un tipa kolonnām, ļaujot vairākiem modeļa tipiem saistīt polimorfiski caur vienu tabulu.
Būtībā `morftomany` definē attiecības no" vecāka "vai" īpašumā "modeļa puses, savukārt" morfedbymany "definē apgrieztās attiecības no" saistītās "modeļa puses, abi paļaujoties uz vienu un to pašu polimorfisko šarnīra tabulas struktūru [5] [9] [1].
Atsauces:
[1.]
[2] https://www.sitepoint.com/eloquents-polymorphic-reelationships-explated/
[3] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all-related-Records
:
[5] https://laravel.com/docs/11.x/eloquent-reelationships
[6] https://docs.octobercms.com/3.x/extend/database/relations.html
[7] https://simple-code.agency/blog/development/Simplifying-many-to-many-regations-with-laravel-polimorfiskās attiecības
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic-many-to-many-reelationhip-pivot-table-with-relation-to-a-a
[9] https://blog.logrocket.com/polymorphic-reelationhips-laravel/