Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hvordan adskiller Morphtomany sig fra MorphedByMymory med hensyn til databasestruktur


Hvordan adskiller Morphtomany sig fra MorphedByMymory med hensyn til databasestruktur


Forskellen mellem `Morphtomany 'og` MorphedbyMymor i Laravel Polymorphic mange-til-mange-forhold ligger primært i deres roller i forholdet, og hvordan databasestrukturen understøtter dem.

Databasestruktur i polymorf mange-til-mange

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

- To modelborde (f.eks. 'Indlæg' og 'tags')
- En mellemliggende drejebord (f.eks. `Taggables`)

Pivot -tabellen indeholder mindst tre kolonner:

- `tag_id` (ID for den relaterede model, f.eks. Tag)
- `taggable_id` (id for modellen, der er relateret til mærket, f.eks. Post eller video)
- `taggable_type` (klassens navn eller type af den relaterede model, f.eks.` App \ Models \ Post` eller `App \ Models \ Video`)

Denne struktur gør det muligt for en enkelt drejebord at relatere flere forskellige modeller til en fælles model (tags i dette tilfælde) uden at have brug for separate drejeborde for hver modelkombination [5] [9].

Roll af `Morphtomany`

- Brugt på modellen, der "ejer" eller "har" det polymorfe forhold.
- Definerer forholdet fra perspektivet af modellen, der er relateret til mange andre modeller.
- For eksempel bruger metoden i en `post` -model 'tags ()' -metoden 'morphtomany' til at få alle tags, der er knyttet til dette indlæg.
- Denne metode specificerer den relaterede model og "Morph -navnet" (f.eks. "Taggable"), der svarer til pivot -tabelkolonnerne (`taggable_id` og` taggable_type`).
- Det spørger pivot -tabelfiltrering efter den aktuelle model's ID og type for at finde relaterede modeller [5] [9].

Roll af `MorphedbyMymor '

- Brugt på modellen, der er målet for det polymorfe forhold.
-Definerer den inverse side af det polymorfe forhold mellem mange og mange.
- For eksempel i `tag` -modellen, metoder som` indlæg () `eller` videoer () `brug` MorphedByMymor 'for at få alle indlæg eller videoer, der er knyttet til dette tag.
- Det specificerer den relaterede modelklasse og det samme morfnavn, der blev brugt i `Morphtomany '.
- Denne metode spørger Pivot -tabelfiltreringen efter den relaterede model type og ID for at finde alle modeller af den type, der er knyttet til den aktuelle model (tag) [5] [9].

Resumé af forskelle i databasebetingelser

- `Morphtomany` kaldes den model, der er relateret til mange andre, og den bruger Pivot Table -kolonne` taggable_id` og `taggable_type` til at filtrere poster, hvor` Taggable_Type` matcher den aktuelle model's klasse.
- `MorphedByMymor 'kaldes den model, der er relateret til (den inverse), og den bruger Pivot -tabellen til at finde alle modeller af en bestemt type, der vedrører den aktuelle model.

Begge metoder bruger den samme drejebord, men adskiller sig i retning af det forhold, de repræsenterer. Pivot -tabellen forbliver den samme med kolonner til den relaterede model's ID og type, hvilket gør det muligt at knytte flere modeltyper polymorfisk gennem en enkelt tabel.

I det væsentlige definerer 'Morphtomany' forholdet fra "forælderen" eller "at eje" model -siden, mens 'morfedbymany' definerer det inverse forhold fra den "relaterede" model side, begge er afhængige af den samme polymorfe drejebordstruktur [5] [9] [1].

Citater:
[1] https://laracasts.com/discuss/channels/laravel/difference-vetween-standard-polymorphic-many-to-many-polymorphic
[2] https://www.sitepoint.com/eloquents-polymorphic-relationships-explained/
[3] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all-related-records
[4] https://laracasts.com/discuss/channels/eloquent/polymorphic-many-to-many-relation-to-multiple-modeller
[5] https://laravel.com/docs/11.x/eloquent-relationships
[6] https://docs.okobercms.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-relation-pivot-table-with-relation-to-t-a
[9] https://blog.logrocket.com/polymorphic-relationships-laravel/