tablas dinámicas en Laravel: Novatadas

tablas dinámicas

Errores de principiante con tablas dinámicas en Laravel

Tabla dinámica — Haremos un recorrido por un error común de principiante mientras trabajamos con relaciones de muchos a muchos en Laravel.

Sé que podría haber estado en una situación en la que se encontró con este error como se muestra a continuación.

tabla dinámica

El error anterior consiste en una relación de muchos a muchos entre la tabla de productos y la tabla de colores.


Antes de profundizar, asumo que ya tiene algún conocimiento sobre las relaciones de muchos a muchos mientras trabaja con bases de datos, si no, no se preocupe, haremos una breve definición de eso.

La relación de muchos a muchos le permite relacionar cada fila de una tabla con muchas filas de otra tabla y viceversa.

Por ejemplo, nuestra tabla de productos y nuestra tabla de colores.

Esta relación entre dos tablas muestra que un producto puede tener muchos colores y los colores también pueden tener diferentes productos, y para que esta relación entre estas dos tablas funcione, tendremos que crear otra tabla que solo contiene la identificación de productos y colores.

Tabla dinámica, necesitamos una tabla dinámica como el centro de la relación entre las dos tablas, solo mire la tabla dinámica como la tabla de unión que contendrá las columnas de clave principal de las dos tablas con las que desea relacionarse y servirá como un mesa intermedia entre ellos.

¿Cómo asignar un nombre a una tabla dinámica?

El nombre de la tabla dinámica debe consistir en nombres singulares de ambas tablas, separados por un símbolo de subrayado y estos nombres deben estar ordenados alfabéticamente, por lo que tendremos colors_products como nombre de nuestra tabla dinámica en este caso.

Con eso fuera del camino, veamos cómo se puede hacer eso de una manera práctica, como el error que se muestra arriba, sabemos que existe una relación entre la tabla de colores y de productos como resultado de eso, esperamos que la tabla dinámica contenga la identificación para ambas tablas, que se usará para almacenar registros relacionales entre los dos.

tabla dinámica

Así es como debería ser nuestra estructura de tabla dinámica.

A continuación, tendremos que asignar la relación entre las dos tablas en sus respectivos modelos.

tenga en cuenta que no tenemos un modelo para tablas dinámicas porque nuestra tabla dinámica se basa en colors_table y la de products_table y dado que no estaremos trabajando con el tabla dinámica directamente no es necesario agregar un modelo.

¿Por qué recibimos un error de columna desconocido para color_id?

El color_id se especifica en nuestra tabla dinámica y deberíamos esperar que funcione, pero aún así recibimos un error. Podemos entender la causa detrás de este error revisando nuestro modelo de color y deberíamos ver algo como la imagen a continuación:

tabla dinámica

La causa de este error es con la asignación de relaciones en el modelo de color, estamos haciendo referencia directa a la relación entre colores y productos.

Si hubiéramos asignado la relación entre las dos tablas sin el uso de la tabla dinámica, podría haber funcionado, pero como estamos al trabajar con una tabla dinámica, se considera necesario un error de este tipo.

¿Cómo podemos evitar esto?

Primero, observemos la siguiente imagen:

tabla dinámica

La imagen de arriba es la misma que la imagen anterior, la única diferencia es que especificamos el nombre de la tabla Pivot como nuestro segundo argumento, lo que indica que la relación entre las dos tablas se almacenará en colors_products, que contiene la columna color_id.

Tenga en cuenta que eso no es todo, tendremos que repetir el mismo método aquí en el modelo del producto también, pero esta vez haremos referencia a la clase Color:: seguida del nombre de la tabla dinámica como nuestro segundo argumento.

¿Por qué estamos haciendo referencia a Color::class en el modelo del producto?

Es lo mismo que resolver la columna color_id faltante, si no se hace referencia a la misma asignación en el modelo del producto, tendremos product_id faltante como nuestro próximo error.


Espero que encuentre esto útil, todo lo mejor en su carrera de depuración.

Gracias por llegar hasta aquí, si encuentras esto útil no olvides aplaudir 👍🏼suscribirse para recibir más contenido.

Si le interesa, puede echar un vistazo a algunos de los otros artículos que he escrito recientemente sobre AWS y Laravel:

Recent Post