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/