20 📦 MÓDULO PRODUCTOS: Modelos y Relaciones (One-to-Many Imágenes) | Laravel 12 E-commerce

Duración: 20 min
Módulo: 📦 Módulos Esenciales (Categorías y Productos) 17-24 Lección 4 de 8

Descripción

Lección 20: 📦 Inicio del Módulo Productos: Modelos y Relaciones (Uno a Muchos)

Este capítulo da comienzo al desarrollo del módulo de Productos, el núcleo del e-commerce, y se centra en el diseño de las tablas, la definición de sus campos y la implementación de las relaciones entre modelos.

🗂️ Diseño de la Estructura de Datos

Se definen dos nuevas tablas esenciales y se utiliza una herramienta de visualización para entender sus vínculos:

  • Herramienta DBML: Se recomienda la extensión DBML Entity Relación [04:12] para crear y visualizar diagramas de entidad-relación (ER) que facilitan la comprensión de las conexiones entre tablas [05:25].
  • Tabla Productos: Almacena la información principal de cada artículo.
    • Campos Clave: Nombre, Código (para barras o query), Descripción Corta (String), Descripción Larga (Text), Precio de Compra (decimal), Precio de Venta (decimal) y Stock [07:31].
    • Llave Foránea: categoría_id [06:44] para establecer la relación con la tabla categorías.
  • Tabla Producto_Imágenes: Permite almacenar múltiples imágenes por producto, una práctica esencial para el comercio electrónico.
    • Campo Clave: imagen (URL) [09:49].
    • Llave Foránea: producto_id [09:41] para establecer la relación con la tabla productos.

⚙️ Implementación de Migraciones con onDelete

Se generan las migraciones para las nuevas tablas (Productos y Producto_Imágenes) y se define su comportamiento de eliminación:

  • Generación de Archivos: Se utiliza el comando PHP Artisan Make:model Producto -mcrf [10:44] para crear todos los archivos base del módulo.
  • Comportamiento en Cascada: En ambas migraciones (productos y producto_imágenes), se utiliza la cláusula onDelete('cascade') [12:41] y [14:51].
    • Consecuencia: Si se elimina una Categoría, se eliminan automáticamente todos sus Productos asociados. Si se elimina un Producto, se eliminan automáticamente todas sus Imágenes asociadas.

🔗 Definición de Relaciones entre Modelos

Se establecen las relaciones One-to-Many (Uno a Muchos) entre los modelos, un paso crucial para realizar consultas de forma sencilla y eficiente:

  • Categoría y Producto:
    • Modelo Categoría: hasMany con Producto [18:03] (Una categoría tiene muchos productos).
    • Modelo Producto: belongsTo con Categoría [18:25] (Un producto pertenece a una categoría).
  • Producto e Imágenes:
    • Modelo Producto: hasMany con ProductoImagen [18:52] (Un producto tiene muchas imágenes).
    • Modelo ProductoImagen: belongsTo con Producto [19:07] (Una imagen pertenece a un producto).