33 ⭐ MÓDULO FAVORITOS (Wishlist): Migración, Modelos y Relación Many-to-Many | Laravel 12 E-commerce
Duración: 45 min
Módulo: 🛒 Tienda Online (Frontend Shop) y Funcionalidades 25-33
Lección 9 de
9
Descripción
Lección 33: ⭐ Módulo Favoritos (Wishlist) | Relación Muchos a Muchos en Laravel
Este capítulo se enfoca en crear el módulo de productos favoritos, una funcionalidad clave que permite a los usuarios guardar productos de interés para una futura compra. La implementación requiere establecer una relación muchos a muchos (Many-to-Many) entre usuarios y productos.
🧱 Diseño y Migración de la Base de Datos
Para enlazar múltiples productos con múltiples usuarios, se diseña una tabla pivote:
- Creación del Modelo y Migración: Se utiliza el comando php artisan make:model ProductoFavorito -mcr para generar el modelo, la migración y el controlador [04:45].
- Tabla Pivote: La tabla productos_favoritos se crea para contener las llaves foráneas:
- Integridad Referencial: Se añade la cláusula onDelete('cascade') a ambas claves foráneas para asegurar que si un producto o un usuario es eliminado, los registros asociados en esta tabla también se eliminen automáticamente [06:09].
🔗 Definición de las Relaciones en Modelos
Se establecen las relaciones de la tabla pivote en los modelos principales, siguiendo la lógica de Laravel:
- Modelo ProductoFavorito: Se define que un producto favorito belongsTo (pertenece a) un User y que también belongsTo (pertenece a) un Producto [08:57], [09:46].
- Modelo User: Se define que un usuario hasMany (tiene muchos) ProductoFavorito [09:18].
- Modelo Producto: Se define que un producto hasMany (tiene muchos) ProductoFavorito [10:01].
💾 Implementación de la Funcionalidad "Añadir a Favoritos"
Se configura la acción para guardar el producto seleccionado por el usuario autenticado:
- Rutas: Se definen dos rutas en web.php: una ruta GET (/favoritos) para listar los productos y una ruta POST (/favoritos) para guardar la información [10:46], [11:58].
- Envío de Datos: El botón de corazón ❤️ en el listado de productos se envuelve en un formulario POST que transmite el ID del producto a guardar, junto con el token CSRF [15:25].
- Controlador (store):
- Validación de Duplicados: Antes de guardar, se verifica si el producto ya existe en la lista de favoritos del usuario autenticado para evitar registros dobles [23:05]. Si ya existe, retorna un mensaje de información.
- Guardado: Si no existe, se crea un nuevo registro en ProductoFavorito, asociando el ID del usuario autenticado con el ID del producto recibido [17:29].
- Notificación Sweet Alert: Se implementa Sweet Alert en la plantilla web para mostrar mensajes de confirmación (Producto favorito agregado) o advertencia [18:17], [20:33].
📃 Vista del Wishlist y Conteo
Se crea la interfaz para que el usuario pueda ver su lista y se añade un contador dinámico:
- Vista Dedicada: Se crea la vista favoritos.blade.php con el layout de la cuenta de usuario para listar los productos [25:28].
- Listado Dinámico: La función index del controlador realiza una consulta que trae los ProductoFavorito del usuario autenticado y carga la relación con el producto para mostrar su nombre, precio y stock [25:41], [36:09].
- Contador en Header: Se implementa un contador dinámico en la cabecera del sitio para mostrar la cantidad de productos favoritos que el usuario tiene actualmente, lo que se logra consultando la base de datos solo si el usuario está autenticado [43:37], [44:31].
Lecciones
🚀 Configuración Inicial y Sistema de Administración 1-6
🛡️ Roles, Permisos y Gestión de Usuarios (Spatie) 7-16
Lección 4. 10 ⚙️ CRUD Completo de Roles | Spatie Roles & Permisos | Ecommerce Laravel 12 FullStack
25 min
Lección 6. 12 🔐 Ajustes en el Login y Seeder de Usuarios | Sistema Ecommerce Laravel 12 FullStack
40 min
Lección 8. 14 🔍 Buscador y Detalle de Usuarios (Acción Show) | Ecommerce Laravel 12 FullStack
32 min
📦 Módulos Esenciales (Categorías y Productos) 17-24
🛒 Tienda Online (Frontend Shop) y Funcionalidades 25-33
Lección 4. 28 🛒 Vista Show Dinámica del Producto | Descripción y Datos Relacionados | Laravel 12
15 min
💳 Carrito, Checkout y Pasarela de Pagos 34-42
Lección 4. 37 💳 PASARELA DE PAGOS PayPal | Integración y Lógica de Checkout en Laravel 12 E-commerce
27 min
Lección 5. 38 ✅ PAGO COMPLETADO y REGISTRO de Pedido | Lógica Final de Venta con PayPal y Laravel 12
11 min
⚙️ Gestión de Órdenes, Perfiles y Características Avanzadas 43-61
Lección 5. 47 🔗 BUSCADOR AVANZADO: Filtrando Tablas Relacionadas con WHERE HAS y Joins en Laravel 12
10 min
📊 Análisis de Datos, Despliegue y Conclusión 62-68
Apoya este proyecto
Si te gusta nuestro contenido, ¡apóyanos con una donación!
Donar por Airtm Donar por Binance¡Gracias por tu apoyo! ❤️