Breaking

Post Top Ad

Your Ad Spot

viernes, 4 de septiembre de 2020

Cómo seleccionar SQL sin procesar usando Eloquent

 Cómo seleccionar SQL sin procesar usando Eloquent

En esta entrega de nuestra aplicación de juegos, agregaremos una barra lateral para las vistas principales de juegos y reseñas. En otras palabras, cuando el usuario del sitio enumera todos los juegos para ver o todas las reseñas para ver, se mostrará una barra lateral. Esta barra lateral contendrá información sobre los juegos y reseñas que han enviado los usuarios del sitio. Específicamente, nos gustaría mostrar al usuario que envió la mayor cantidad de juegos primero, al usuario que envió la segunda mayor cantidad de juegos en segundo lugar, y así sucesivamente. Es una forma de presentar, por así decirlo, a los colaboradores activos del sitio. ¿Cómo podemos hacer esto? Vamos a hacer esto haciendo uso de consultas sql sin procesar combinadas con Eloquent. Veamos cómo hacer esto ahora.


Primero, averigüe su consulta sin procesar

Ok, aquí está el trato Eloquent fans. Cuando necesite realizar consultas que comiencen a obtener un poco más que simplemente buscar todos los registros en la base de datos, necesitará saber cuál es la consulta real que está tratando de enviar a la base de datos, antes de poder usar Eloquent para realizar la acción por ti. Si no sabe cómo construir consultas SQL por su cuenta, intentar crear consultas usando Eloquent solo lo frustrará. Dicho esto, ¿qué estamos tratando de hacer con nuestra consulta?


¿Qué quieres, en inglés natural?

Queremos obtener los usuarios de la base de datos que han enviado la mayor cantidad de juegos y colocar al remitente más activo en la parte superior de nuestros resultados. Primero averigüemos esto en MySql sin procesar. Para ello, haremos uso de DataGrip, que es una fantástica herramienta de base de datos que le ofrece JetBrains. JetBrains también es el creador de PHP Storm, un gran software.

En primer lugar, necesitamos los nombres de usuario. Podemos hacer esto con una simple instrucción SELECT.
consulta de selección de agarre de datos de jetbrains

A continuación, necesitamos información sobre los juegos que envió cada usuario.
Mmm, podríamos tener un pequeño problema. Estamos seleccionando datos de la tabla de usuarios y ahora tenemos los nombres de los usuarios. Esto es útil, pero en la tabla de usuarios, no hay nada sobre juegos o qué juegos podría haber enviado un usuario. Sin embargo, la mesa de juegos tiene información sobre los juegos que los usuarios han enviado. Parece que estamos intentando obtener información de dos tablas al mismo tiempo. Estamos estancados? No lo estamos. En un caso como este, desea utilizar un JOIN para ayudarlo. Al usar una instrucción JOIN, puede obtener datos de dos tablas a la vez. Nos uniremos a la mesa de juegos y a la mesa de usuarios con la condición de que el campo user_id de los juegos sea igual al campo id de los usuarios.
declaración de unión de agarre de datos

Ok, ¿qué pasó ahí? Ahora obtenemos el resultado de Mario, Mario, Mario, Toad, Luigi y Toad. No es realmente lo que necesitamos todavía. Necesitamos contar de alguna manera la cantidad de juegos que envió cada usuario. Para esto, necesitaremos hacer uso de la función agregada count () y la cláusula GROUP BY . Aquí, debemos especificar un recuento de todos los juegos enviados y cambiar el nombre de la tabla temporal como un alias de submit_games. Con eso completo, necesitaríamos agrupar esos resultados por los nombres de los usuarios. Veamos:
recuento de agarre de datos y agrupar por

¡Nos estamos acercando! Ahora podemos ver que Luigi ha enviado 1 juego, Mario ha enviado 3 juegos y Toad ha enviado 2 juegos. Sin embargo, queremos destacar a los que envían juegos más activos, por lo que queremos a Mario en la parte superior y Luigi en la parte inferior. Podemos simplemente agregar una cláusula ORDER BY útil para hacer esto. ¿Qué ordenaremos? Ordenaremos por el número de juegos enviados en orden descendente.
la consulta final en el control de datos


Nuestra consulta SQL sin procesar final

Esto es exactamente lo que queremos, y es útil adoptar este pequeño enfoque incremental para crear consultas de base de datos. Ahora sabemos lo que estamos tratando de hacer y cómo hacerlo con una consulta sin formato. Llevemos esto a Laravel ahora.


Convierta su consulta sin procesar en elocuente

Si convertimos esa consulta sin formato que se nos ocurrió en Laravel, puede verse algo como esto:


Agregue la consulta al método index () en el controlador de juegos

Cuando visitemos la ruta / games, recuerde que esto activa el método index () en el controlador de juegos. Nos gustaría poder ver esta barra lateral al ver todos los juegos, por lo que tendremos que buscar a los usuarios más activos de la base de datos en este método. Podemos actualizar el controlador de juegos así:


aplicación / Http / Controllers / GamesController.php


Actualiza el archivo de vista games / index.blade.php

Nuestro archivo de vista actual para enumerar todos los juegos lo hace con una simple columna. Necesitamos cambiar esto solo un poco para dejar espacio en el costado para mostrar una barra lateral que enumerará nuestra nueva sección de usuarios más activos. Así es como actualizamos ese archivo. Tenga en cuenta que estamos extrayendo el marcado real dentro de la barra lateral a su propio parcial.


recursos / vistas / juegos / index.blade.php


recursos / vistas / parciales / activeusers.blade.php

El marcado para el archivo de vista parcial.

¡Luciendo bien!
barra lateral de laravel impulsado por selectraw


Mostrar usuarios más activos en la página de reseñas

También puede ser interesante mostrar los principales remitentes en el sitio cuando los usuarios visitan / revisan. Entonces, si están viendo todos los juegos, o todas las reseñas, ven una barra lateral con los mejores remitentes de juegos. Parece que tendremos que actualizar el Controlador de revisiones además del archivo reviews / index.blade.php. Actualicemos esos para que podamos obtener la bondad en ambas páginas.


recursos / vistas / reseñas / index.blade.php

Ahora tenemos a los usuarios más activos que se muestran en los puntos finales / reviews y / games.
componente de usuario activo en la página de reseñas


Tiempo de refactorización

Esas consultas en nuestros métodos de controlador no son las más atractivas. Debemos arreglar esto con vigor y tenacidad a la vez. Extraigamos esta funcionalidad en otro lugar, donde pueda ocultar su complejidad en las sombras.

Primero escribiremos el código, como nos gustaría tenerlo en el controlador. Sería bueno si pudiéramos simplemente buscar nuestros remitentes de juegos activos con algo tan simple como $ activeusers = User :: activeusers (); De hecho, actualizaremos el controlador de juegos como tal ahora mismo.


aplicación / Http / Controllers / GamesController.php


Actualizar el modelo de usuario

Ahora debemos definir el método activeusers () en nuestro modelo de usuario para que funcione en nuestro controlador de juegos. Así es como podemos hacer que eso suceda.


aplicación / User.php


aplicación / Http / Controllers / ReviewsController.php

Ahora también podemos hacer que nuestro Controlador de Reseñas sea bonito.


Como un jefe

barra lateral funcionando muy bien


Cómo seleccionar SQL sin procesar usando el resumen de Eloquent

En este tutorial, vimos cómo puede incorporar consultas sql sin procesar en su código Eloquent. A veces, esto es necesario cuando desea aplicar consultas de tipo más granular que pueden involucrar tablas de alias u otras consultas de tipo muy específico. Durante este proceso, vimos que tiene sentido averiguar qué es lo que realmente está tratando de obtener de la base de datos en un lenguaje sencillo. Luego, puede traducir esto al código SQL real para ver si devuelve los datos que está buscando. Una vez que esté satisfecho, puede convertir esta consulta en Eloquent y probarla en su aplicación. En nuestro caso, hicimos uso del método selectRaw () para insertar sql sin formato en nuestra consulta donde fuera necesario. Con este enfoque, Se nos ocurrió una consulta personalizada para encontrar los remitentes más activos de juegos ordenados por los remitentes principales para poder crear un widget para mostrar en nuestro sitio web de juegos. ¡Muy genial!

No hay comentarios.:

Publicar un comentario

Post Top Ad

Your Ad Spot

Páginas