90 Cargar los DATOS de las PELÍCULAS MÁS VISTOS en mi PÁGINA WEB con (LARAVEL y MYSQL) FULLSTACK
Duración: 10 minDescripción
📊 Lección 90: Cargar los Datos de las Películas Más Vistas
Esta lección avanzada implementa la lógica de doble consulta y, crucialmente, resuelve el problema de la pérdida de ordenación que ocurre al buscar los datos completos, utilizando una función especial de MySQL y Laravel para mantener la secuencia de popularidad.
1. 🔍 Segunda Consulta de Datos Completos [00:00]
Se implementa la segunda consulta, similar a la usada en "Favoritos" e "Historial", para obtener la información de las películas a partir del array de IDs.
- Uso de whereIn: La consulta utiliza el modelo Pelicula y el método whereIn para buscar todos los registros cuyo id coincida con los IDs recopilados en la variable $losMasVistos (el array ordenado por conteo) [00:33].
- Retorno a la Vista: La colección de resultados ($peliculas) se pasa a la vista los_mas_vistos.blade.php [01:01].
2. ⚠️ Problema de la Pérdida de Ordenación [02:05]
Al verificar los resultados, se detecta que, aunque se traen las películas correctas, no se respeta el orden de conteo de vistas. La base de datos, por defecto, ordena por el ID primario, no por la secuencia del array de popularidad.
- Error Detectado: La película más vista (ID 11) debería aparecer primera, pero no lo hace, rompiendo la lógica de "Más Vistos" [03:07].
3. 🛠️ Solución: Uso de ORDER BY FIELD y Conversión de Array a String [03:22]
Para forzar a MySQL a ordenar los resultados de acuerdo con la secuencia exacta del array de IDs, se utiliza la función ORDER BY FIELD.
A. Conversión del Array a String [04:47]
La función ORDER BY FIELD requiere una cadena de texto separada por comas, no un array de PHP.
Método implode: Se usa el método implode para convertir el array de IDs ($losMasVistos) en una cadena de texto separada por comas, por ejemplo: "11,5,10,20..." [05:08].
PHP
$bar = implode(',', $losMasVistos);
B. Aplicación de orderByRaw [06:50]
Se modifica la consulta de películas (Pelicula::whereIn(...)) para incluir la ordenación personalizada.
orderByRaw: Se utiliza el método orderByRaw de Eloquent para inyectar una instrucción SQL directamente, forzando la ordenación por la cadena de IDs [07:07]:
PHP
Pelicula::whereIn('id', $losMasVistos) ->orderByRaw("FIELD(id, {$bar})") ->get();
- Función FIELD: Le indica a MySQL que ordene los resultados de la columna id según el orden de los valores proporcionados en la cadena $bar.
4. 🖼️ Despliegue Final y Verificación [08:08]
Se implementa el bucle de visualización y se comprueba la funcionalidad completa.
- Integración de la Vista: Se copia y adapta la estructura de tarjetas (@foreach y el Carrusel) de otras secciones de películas para desplegar los resultados en los_mas_vistos.blade.php [07:55].
- Verificación: Se confirma que la película más vista (ID 11) aparece correctamente en la primera posición, respetando el orden de popularidad calculado [08:43].
Próximo paso: La siguiente lección se centrará en la funcionalidad de "Estrenos" y la gestión de las categorías restantes [09:29].
Lecciones
Apoya este proyecto
Si te gusta nuestro contenido, ¡apóyanos con una donación!
Donar por Airtm Donar por Binance¡Gracias por tu apoyo! ❤️