Una de las cosas que en mi poca corta experiencia laboral me ha quedado más que clara, es que, sin importar el sistema que estés desarrollando el cliente/empresa siempre solicitara reportes para determinar el rendimiento de su negocio, siendo por lo general una característica primordial mostrar dichas estadísticas según estampas de tiempo.

Si bien no es muy complejo realizar este tipo de consultas con SQL puro usando un poco de creatividad al dar formato a las mismas, también es una realidad que siempre que se pueda hay que sacar partido de las herramientas que el Framework pone a nuestra disposición a fin de facilitarnos el proceso de desarrollo de nuestros sistemas.

Cuando realizamos consultas a la base de datos haciendo uso de Eloquent, generalmente hacemos uso de las “Where Clauses” para de manera sencilla obtener información según ciertos parámetros,  por lo que haremos uso de dicha característica del ORM para ejemplificar el post del día de hoy.

Gracias a la madurez que esta herramienta ha ganado, se ha vuelto mas robusto con el paso del tiempo,  y a partir de la versión 5.3 de Laravel se incluyo de manera oficial el uso de “Where Clauses” especificas para consultas por estampas de tiempo (Esta característica estuvo disponible desde la versión 4.2 sin embargo su aparición en la documentación fue en la versión antes indicada), mismas que proporcionan una manera sencilla y elegante de construir nuestros queries como se muestra en los ejemplos descritos a continuación:

Ejemplos:

whereDate Sirve para consultar fechas especificas en la base de datos, se debe introducir la fecha con el formato YYYY-MM-DD (Año-Mes-Dia) de la siguiente manera:

Movement::whereDate('created_at', '2021-01-17')->get();

whereMonth Este método consulta todos los datos correspondientes a un mes en especifico, es decir, el ejemplo de a continuación trae consigo todos los registros del mes de enero sin importar a que año pertenezcan:

Movement::whereMonth('created_at', '01')->get();

whereDay De manera similar al ejemplo anterior pero con la variante de que en esta ocasión busca los registros correspondientes a un día en especifico de cualquier mes y de cualquier año:

Movement::whereDay('created_at', '22')->get();

whereYear Esta clause es ideal para generar reportes anuales ya que va a consultar todos los registros correspondientes al año que se le introduzca:

Movement::whereYear('created_at', '2021')->get();

whereTimeDe igual manera existe una clause para hacer consultas dadas en un horario determinado:

Movement::whereTime('created_at', '17:26:21')->get();

Una vez conoces el uso de este tipo de Where Clauses puedes sacar todo su potencial combinándolos de diversas maneras, por ejemplo a continuación hare una consulta donde indico que quiero obtener todos los datos del año 2021 a la vez que esos datos deben pertenece únicamente a enero del mismo año.

Movement::whereYear('created_at', '2021')
	->whereMonth('created_at', '01')
	->get();

Finalmente podemos llevar nuestras consultas un poco mas lejos ya que además de lo antes mencionado también podemos hacer uso de operadores relacionales (‘=’, ‘<‘, ‘>’, ‘<=’, ‘>=’, ‘<>’, ‘!=’, ‘like’) como muestro a continuación:

Movement::whereYear('created_at', '2021')
	->whereMonth('created_at','>=' , '01')
	->whereMonth('created_at','<=', '06')
	->get();

De aquí en adelante todo depende de tu creatividad al construir tus consultas y a los requerimientos necesarios para dar funcionalidad a tus sistemas.

Conclusiones:

Si bien no hay una manera absoluta de hacer las cosas, un consejo que puedo dar a aquellos desarrolladores que empiezan en Laravel, es que antes de reinventar la rueda primero se pregunten (Investiguen mas bien) si el Framework cuenta con una solución lista para implementar y dar solución a su problema.

Y hasta aquí llega el post de esta semana, espero les sea de utilidad y nos veremos pronto con otra entrada ¡Hasta pronto!

Referencias:

https://laravel.com/docs/8.x/queries#basic-where-clauses