Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hvordan skiller morphtomany seg fra morfedbymany når det gjelder databasestruktur


Hvordan skiller morphtomany seg fra morfedbymany når det gjelder databasestruktur


Forskjellen mellom `morphtomany` og` morphedbymany` i Laravel polymorfe mange-til-mange-forhold ligger først og fremst i deres roller i forholdet og hvordan databasestrukturen støtter dem.

Databasestruktur i polymorf mange-til-mange

Polymorfe mange-til-mange-forhold involverer tre hovedtabeller:

- To modelltabeller (f.eks. `Posts` og` Tags`)
- Én mellomliggende pivottabell (f.eks. `Taggables`)

Pivottabellen inneholder minst tre kolonner:

- `tag_id` (IDen til den relaterte modellen, f.eks. Tag)
- `Taggable_id` (IDen til modellen som er relatert til taggen, f.eks. Post eller video)
- `Taggable_Type` (klassenavnet eller typen til den relaterte modellen, for eksempel` App \ Models \ Post` eller `App \ Models \ Video`)

Denne strukturen gjør at en enkelt pivottabell kan relatere flere forskjellige modeller til en vanlig modell (tagger i dette tilfellet) uten å trenge separate pivottabeller for hver modellkombinasjon [5] [9].

Rollen til `morphtomany`

- Brukes på modellen som "eier" eller "har" det polymorfe forholdet.
- Definerer forholdet fra perspektivet til modellen som er relatert til mange andre modeller.
- For eksempel bruker i en `Post` -modell,` tags () `-metoden` morphtomany` for å få alle tagger tilknyttet det innlegget.
- Denne metoden spesifiserer den relaterte modellen og "morfnavnet" (f.eks. '' Taggable '), som tilsvarer pivot -tabellkolonnene (`taggable_id` og` taggable_type`).
- Det spør om pivot -tabellfiltrering av den nåværende modellens ID og type for å finne relaterte modeller [5] [9].

Rollen til `MorphedByMany`

- Brukes på modellen som er målet for det polymorfe forholdet.
-Definerer den omvendte siden av det polymorfe mange-til-mange-forholdet.
- For eksempel, i `tag` -modellen, metoder som` innlegg () `eller` videoer () `bruk` morphedbymany` for å få alle innlegg eller videoer tilknyttet den taggen.
- Den spesifiserer den relaterte modellklassen og det samme morf -navnet som ble brukt i `morphtomany`.
- Denne metoden spør om pivot -tabellfiltrering av den relaterte modellens type og ID for å finne alle modeller av den typen assosiert med den nåværende modellen (TAG) [5] [9].

Sammendrag av forskjeller i databasevilkår

- `Morphtomany` kalles på modellen som er relatert til mange andre, og den bruker pivot -tabellkolonnene` taggable_id` og `taggable_type` for å filtrere poster der` taggable_type` samsvarer med den nåværende modellens klasse.
- `MorphedByMany` blir kalt på modellen som er relatert til (det omvendte), og den bruker pivottabellen for å finne alle modeller av en spesifikk type som relaterer seg til den nåværende modellen.

Begge metodene bruker den samme pivottabellen, men avviker i retning av forholdet de representerer. Pivottabellen forblir den samme, med kolonner for den relaterte modellens ID og type, slik at flere modelltyper kan kobles polymorfisk gjennom en enkelt tabell.

I hovedsak definerer `Morphtomany` forholdet fra den" forelderen "eller" å eie "modellsiden, mens` morphedbymany` definerer det omvendte forholdet fra den "relaterte" modellsiden, begge er avhengige av den samme polymorfe pivot -tabellstrukturen [5] [9] [1].

Sitasjoner:
[1] https://laracasts.com/discuss/channels/laravel/difference-between-standard-polymorphic-many-to-many-polymorfic
[2] https://www.sitepoint.com/eloquents-polymorphic-relationships-seplained/
[3] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-alling-related-records
[4] https://laracasts.com/discuss/channels/eloquent/polymorphic-many-to-many-relation-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/simplifying-many-to-many-relationships-with-laravel-polymorphic-relations
[8] https://stackoverflow.com/questions/68073778/laravel-polymorphic-many-to-many-relationship-pivot-table-with-relationship-to-a
[9] https://blog.logrocket.com/polymorphic-relationships-laravel/