Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon In che modo la morftomania differisce da morphedbymany in termini di struttura del database


In che modo la morftomania differisce da morphedbymany in termini di struttura del database


La differenza tra le relazioni "morphtomany" e `morphedbymany" nelle relazioni molti-to-molti di Laravel Polimorphic si trova principalmente nei loro ruoli nella relazione e in che modo la struttura del database li supporta.

Struttura del database in Polimorfico MUSE-to-Cany

Le relazioni polimorfiche da molti a molti coinvolgono tre tabelle principali:

- Due tabelle del modello (ad esempio, `post` e` tags`)
- Una tabella per giri intermedi (ad esempio, `taggables`)

La tabella pivot contiene almeno tre colonne:

- `tag_id` (l'ID del modello correlato, ad esempio tag)
- `taggable_id` (l'ID del modello correlato al tag, ad esempio post o video)
- `taggable_type` (il nome o il tipo di classe del modello correlato, ad esempio,` app \ modelli \ post` o `app \ modelli \ video`)

Questa struttura consente a una singola tabella per pivot di mettere in relazione più modelli diversi con un modello comune (tag in questo caso) senza bisogno di tabelle di pivot separate per ciascuna combinazione di modello [5] [9].

Ruolo di `morphtomany`

- usato sul modello che "possiede" o "ha" la relazione polimorfica.
- Definisce la relazione dal punto di vista del modello correlato a molti altri modelli.
- Ad esempio, in un modello `post`, il metodo` tags () `usa` morphtomany` per ottenere tutti i tag associati a quel post.
- Questo metodo specifica il modello correlato e il "nome morph" (ad esempio, `'taggable'`), che corrisponde alle colonne della tabella pivot (` taggable_id` e `taggable_type`).
- interroga il filtro della tabella pivot da ID e tipo del modello corrente per trovare modelli correlati [5] [9].

Ruolo di `MorphedByMany`

- Utilizzato sul modello che è il bersaglio della relazione polimorfica.
-Definisce il lato inverso della relazione polimorfica da molti a molti.
- Ad esempio, nel modello `tag`, metodi come` post () `o` video () `usa` morphedbymany` per ottenere tutti i post o i video associati a quel tag.
- Specifica la classe modello correlata e lo stesso nome morph usato in `morphtomany`.
- Questo metodo interroga il filtro della tabella pivot dal tipo e l'ID del modello correlati per trovare tutti i modelli di quel tipo associati al modello corrente (TAG) [5] [9].

Riepilogo delle differenze in termini di database

- `Morphtomany` è chiamato sul modello correlato a molti altri e utilizza le colonne della tabella pivot` taggable_id` e `taggable_type` per filtrare i record in cui` taggable_type` corrisponde alla classe del modello corrente.
- `MorphedByMany` è chiamato sul modello a cui è correlato (l'inverso) e utilizza la tabella pivot per trovare tutti i modelli di un tipo specifico che si riferiscono al modello corrente.

Entrambi i metodi usano la stessa tabella dei perni ma differiscono nella direzione della relazione che rappresentano. La tabella pivot rimane la stessa, con colonne per l'ID e il tipo del modello correlati, consentendo di collegare più tipi di modello polimorfico attraverso una singola tabella.

In sostanza, `Morphtomany` definisce la relazione dal lato del modello" genitore "o" possedere ", mentre` MorphedbyMany` definisce la relazione inversa dal lato modello "correlato", entrambi basandosi sulla stessa struttura della tabella dei perni polimorfici [5] [9] [1].

Citazioni:
[1] https://laracasts.com/discuss/channels/laravel/difference-between-standard-polymorphic-many-to-many-polymorphic
[2] https://www.sitepoint.com/eloquets-polymorphic-relationships-esplained/
[3] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-all-records
[4] https://laracasts.com/discuss/channels/elquent/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/simplifing-many-to-many-relationships-with-laravel-polymerphic-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/