administrador.base.orm._result.result_sql.21.23.0 - gamboamartin/administrador GitHub Wiki
result_sql
La función result_sql se utiliza para ejecutar una consulta SQL en la base de datos utilizando un modelo base y parsear los resultados de la consulta, incluyendo el cálculo de totales para columnas específicas.
Signatura
private function result_sql(array $campos_encriptados, array $columnas_totales, string $consulta, modelo_base $modelo): array|stdClass
Parámetros
- $campos_encriptados: (array) Un arreglo de nombres de campos encriptados que se deben desencriptar en los resultados de la consulta.
- $columnas_totales: (array) Un arreglo de nombres de columnas para las cuales se calcularán los totales.
- $consulta: (string) La consulta SQL que se ejecutará en la base de datos.
- $modelo: (modelo_base) El modelo base que se utilizará para ejecutar la consulta.
Retorna
- array|stdClass: Un objeto stdClass que contiene los siguientes elementos:
-
- result (PDOStatement) El resultado de la ejecución de la consulta.
-
- r_sql (PDOStatement) El cursor de la consulta SQL.
-
- new_array (array) Un arreglo de registros parseados a partir de los resultados de la consulta.
-
- n_registros (int) El número de registros devueltos por la consulta.
-
- totales (stdClass) Un objeto que contiene los totales calculados para las columnas especificadas.
Explicación Detallada
Comienza proporcionando un arreglo de nombres de campos encriptados ($campos_encriptados), un arreglo de nombres de columnas para los cuales se calcularán los totales ($columnas_totales), la consulta SQL ($consulta), y el modelo base que se utilizará para ejecutar la consulta ($modelo).
Verifica que la consulta no esté vacía.
Ejecuta la consulta SQL utilizando el método ejecuta_sql del modelo base.
Verifica si hay errores al ejecutar la consulta.
Parsea los resultados de la consulta llamando a la función parsea_registros_envio.
Verifica si hay errores al parsear los registros.
Calcula los totales para las columnas especificadas llamando a la función totales_rs.
Verifica si hay errores al calcular los totales.
Obtiene el número de registros devueltos por la consulta.
Cierra el cursor de la consulta SQL.
Retorna un objeto stdClass que contiene el resultado de la ejecución de la consulta, el cursor de la consulta, los registros parseados, el número de registros y los totales calculados.
Ejemplos
<?php
// Definición de Parámetros
$campos_encriptados = ["nombre", "apellido"];
$columnas_totales = ["cantidad", "precio"];
$consulta = "SELECT * FROM productos";
$modelo = new modelo_base();
// Llamada a la Función
$resultado = result_sql($campos_encriptados, $columnas_totales, $consulta, $modelo);
// Verificación del Resultado
echo "Número de Registros: " . $resultado->n_registros . "\n";
echo "Totales Calculados:\n";
foreach ($columnas_totales as $campo) {
echo "- $campo: " . $resultado->totales->$campo . "\n";
}
?>
/*
Número de Registros: 10
Totales Calculados:
- cantidad: 150
- precio: 1250*/
Código de la Función
private function result_sql(array $campos_encriptados, array $columnas_totales, string $consulta,
modelo_base $modelo): array|stdClass
{
$consulta = trim($consulta);
if($consulta === ''){
return $this->error->error(mensaje: "Error consulta vacia", data: $consulta.' tabla: '.$modelo->tabla,
es_final: true);
}
$result = $modelo->ejecuta_sql(consulta: $consulta);
if (errores::$error) {
return $this->error->error(mensaje: 'Error al ejecutar sql', data: $result);
}
$r_sql = $result->result;
$new_array = $this->parsea_registros_envio(campos_encriptados: $campos_encriptados, modelo_base: $modelo,
r_sql: $r_sql);
if (errores::$error) {
return $this->error->error(mensaje: "Error al parsear registros", data: $new_array);
}
$totales_rs = $this->totales_rs(columnas_totales: $columnas_totales,new_array: $new_array);
if (errores::$error) {
return $this->error->error(mensaje: "Error al parsear totales_rs", data: $totales_rs);
}
$n_registros = $r_sql->rowCount();
$r_sql->closeCursor();
$data = new stdClass();
$data->result = $result;
$data->r_sql = $r_sql;
$data->new_array = $new_array;
$data->n_registros = $n_registros;
$data->totales = $totales_rs;
return $data;
}