39 📦 MÓDULO ÓRDENES: Estructura de BD, Modelos y Relación de Detalles (Order Items) | Laravel 12

Duración: 31 min
Módulo: 💳 Carrito, Checkout y Pasarela de Pagos 34-42 Lección 6 de 9

Descripción

Lección 39: 📦 Módulo Órdenes: Estructura de BD, Modelos y Relación de Detalles (Order Items) | Laravel 12

Este capítulo se dedica a la creación de la infraestructura de base de datos y modelos para gestionar los pedidos generados tras un pago exitoso, separando la información de la orden principal de sus productos detallados.

🧱 Diseño del Modelo Entidad-Relación

Se definen dos nuevas tablas para el seguimiento completo de cada venta [01:47]:

  • Tabla órdenes (Orders) 🧾: Almacena los datos principales de la compra.
    • usuario_ID: Quién realizó la orden [02:13].
    • total y divisa: Monto final y moneda utilizada [02:25].
    • estado_del_pago: (Pendiente, Completado, Rebotado) [02:52].
    • estado_de_la_orden: (Procesando, Enviado, Finalizado) - gestionado por el administrador [03:01].
    • transacción_ID: El identificador de pago de PayPal [03:39].
    • dirección_envío: Dónde se entregará el pedido [03:50].
  • Tabla detalle_órdenes (Order Items) 🛍️: Almacena los productos de esa orden específica.
    • orden_ID: Relación con la orden principal [05:07].
    • producto_ID: El producto vendido.
    • precio: Precio fijo al momento de la venta (para evitar que cambios futuros en el producto afecten el registro histórico de la venta) [05:27].
    • cantidad: Unidades compradas.

⚙️ Creación de Migraciones y Modelos

Se generan y ejecutan las migraciones para crear las nuevas tablas, y se definen las relaciones entre los modelos:

  • Creación de Archivos: Se usa php artisan make:model Orden -mcr y DetalleOrden para generar modelos, migraciones y controladores [06:53].
  • Ejecución de Migraciones: Se usa php artisan migrate para crear las tablas órdenes y detalle_órdenes [10:27].
  • Definición de Relaciones 🔗:
    • Modelo Orden: Relación belongsTo con Usuario y hasMany con DetalleOrden [13:03].
    • Modelo DetalleOrden: Relaciones belongsTo con Orden y Producto [13:52].

📝 Preparación de la Lógica de Checkout

Se ajusta la lógica del controlador para recopilar toda la información necesaria antes de guardar la orden:

  • Captura de Dirección de Envío: Se añade un campo de texto en la vista del carrito (checkout) para que el usuario ingrese su dirección_envío [24:19].
  • Validación: Se valida que la dirección y el total sean campos requeridos [27:35].
  • Uso de Sesiones Temporales 📤: Dado que el proceso de pago con PayPal implica una redirección, la dirección de envío capturada se guarda en una variable de sesión temporal (request()->session()->put()) en la función pago, y luego se recupera en la función gracias para ser utilizada en el registro de la orden [27:55].
  • Datos Finales Recopilados: Al finalizar la lección, el sistema ya tiene en la función gracias todos los datos esenciales para registrar el pedido:
    • usuario_ID, total, divisa, transacción_ID, estado_del_pago (Complete), estado_de_la_orden (Procesando) y dirección_envío [29:46].