La relación `Morftomany` en Laravel se usa para definir relaciones polimórficas de muchas a muchos, donde múltiples modelos pueden compartir una relación con un tipo de modelo único a través de una tabla intermedia polimórfica. Esto permite una asociación flexible de muchos modelos diferentes a un modelo común sin necesidad de tablas dinámicas separadas para cada par de modelos.
Casos de uso común para `morftomanía 'en Laravel
** 1. Sistemas de etiquetado
Uno de los casos de uso más comunes es implementar un sistema de etiquetado donde se pueden etiquetar múltiples modelos diferentes (por ejemplo, publicaciones, videos, páginas) con las mismas etiquetas. En lugar de tener tablas de pivote separadas para cada relación de etiqueta modelo, `Morphtomany` permite que todas las etiquetas se almacenen en una sola tabla de 'etiquetas' y asociado polimórficamente con cualquier modelo.
Por ejemplo, los modelos `post` y` video` pueden tener un método `etiqueta ()` usando `morphtomany` para recuperar etiquetas, y el modelo` etiqueta 'puede usar `morphedbybymany` para obtener todas las publicaciones o videos etiquetados con ella [1] [5] [9].
** 2. Categorizar varios tipos de contenido
Similar a las etiquetas, las categorías se pueden compartir en diferentes tipos de contenido. Por ejemplo, tanto los artículos como los productos pueden necesitar ser categorizados, y una relación polimórfica de muchos a muchos les permite compartir categorías sin tablas redundantes.
** 3. Asignación de etiquetas o atributos a múltiples modelos
Si tiene etiquetas, atributos o características que pueden aplicarse a diferentes modelos (por ejemplo, usuarios, pedidos, productos), el uso de `morftomany` le permite asociar estas etiquetas de manera flexible con cualquier tipo de modelo.
** 4. Roles de usuario o permisos en múltiples tipos de usuarios
En aplicaciones con múltiples tipos de usuarios (por ejemplo, administrador, cliente, proveedor), roles o permisos pueden asignarse polimórficamente utilizando `morftomany` para que los roles se administren en una sola tabla pero relacionados con diferentes modelos de usuarios [1].
** 5. Vinculación de comentarios o archivos adjuntos a múltiples modelos de muchas a muchos
Si bien los comentarios a menudo son polimórficos de uno a muchos, podría haber escenarios en los que múltiples comentarios o archivos adjuntos se relacionan con múltiples modelos de una manera de muchos a muchos. `Morphtomany` puede usarse para modelar tales relaciones.
Cómo funciona 'Morphtomany`
- Utiliza una sola tabla de pivote, por ejemplo, `taggables`, con columnas para` tag_id`, `taggable_id` y` taggable_type`.
- Las columnas `taggable_id` y` taggable_type` permiten que Laravel determine con qué modelo está asociada la etiqueta.
- En los modelos relacionados (por ejemplo, `post`,` video`), define un método que devuelve `$ this-> morphtomany (tag :: class, 'taggable')`.
- En el modelo `TAG`, define las relaciones inversas utilizando` MorphedByMany` para recuperar todos los modelos de un tipo dado asociado con esa etiqueta [1] [5].
Resumen
`Morphtomany` es ideal cuando desea asociar múltiples modelos con un modelo común de una manera polimórfica de muchos a muchos. Se utiliza ampliamente para sistemas de etiquetado, categorización, asignación de roles en múltiples tipos de usuarios y cualquier escenario en el que muchos modelos diferentes compartan un conjunto común de modelos relacionados sin necesidad de tablas de dinamómetro separadas para cada par.
Este enfoque simplifica el diseño de la base de datos y el mantenimiento del código al centralizar las relaciones polimórficas de muchos a muchos en una sola estructura elegante.
Citas:
[1] https://blog.logrocket.com/polymorphic-relationships-laravel/
[2] https://laraveldaily.com/post/polymórfica-relations-laravel-open-source-examples
[3] https://stackoverflow.com/questions/57522923/how-to-use-morphtomany
[4] https://stackoverflow.com/questions/43285779/laravel-polymórfica---has-many-through
[5] https://laravel.com/docs/11.x/eloquent-relationships
[6] https://www.linkedin.com/pulse/complete-guide-polymorphic-relationships-morphs-sajith-madhubashana-rk1xc
[7] https://joedixon.co.uk/a-practical-use-case-for-laravels-polymórficos-relación
[8] https://stackoverflow.com/questions/58811999/what- ona-the-uses-of-morphs-column-type-in-laravel
[9] https://laraveldaily.com/post/laravel-polymorphic-many-to-many-get-alt-relation-records