Otro post que escribo sobre GORM, un ORM de Go. En este caso vamos a ver cómo hacer una consulta manual y un escaneo manual, es decir, algo tipo raw. Algo así como una query personalizada.
Este tipo de consultas son poco comunes pero existen para cuando necesitamos hacer un reporte o traer ciertos datos que no corresponden a un único modelo.
Modelo que va a representar cada fila
En primer lugar comenzamos definiendo el modelo en donde vamos a escanear los valores. Yo voy a poner un ejemplo simple: un modelo que tiene una ganancia (es decir, un valor monetario) y un id del empleado que tiene esa ganancia.
Fíjate en que aunque la columna en el struct se llama IdEmpleado
le estoy indicando a GORM que la columna que va a escanear sobre este valor será la que tenga el nombre de id
.
Por cierto, cada nombre de propiedad del struct debe coincidir con el nombre de columna de la tabla. Por ejemplo, si en la tabla existe una columna llamada id_usuario
la misma será tomada en cuenta si hay una propiedad llamada IdUsuario
.
El arreglo en donde se colocan los valores
Luego creamos el arreglo en donde vamos a colocar los valores:
Hacer consulta y obtener filas
Ahora hago mi consulta y obtengo las filas. La sintaxis es:
filas, err := bd.Raw("consulta", posibles_parámetros...).Rows()
Es importante comprobar que el error es nil y cerrar las filas con filas.Close
(se puede usar defer). En mi caso:
Que no te confunda la consulta, solo te estoy colocando un ejemplo.
Recorrer y escanear
Finalmente, recorremos las filas, escaneamos y agregamos el valor al arreglo:
Código completo
El código completo queda así; estoy omitiendo la parte en donde obtienes la conexión a la base de datos pues eso puede variar:
Otro ejemplo completo
Aquí tengo otro ejemplo más simple, en lenguaje Go usando Gorm:
Fíjate que en mi consulta SQL tengo las columnas llamadas conteo
, materia
e id_materia
. En mi struct corresponden, en el mismo orden, a Conteo
, Materia
e IdMateria
.
0 Comentarios