administrador.base.orm.modelo.cuenta_bis - gamboamartin/administrador GitHub Wiki
cuenta_bis
La función cuenta_bis
genera una consulta SQL que cuenta el número de registros que coinciden con los filtros aplicados. La consulta se genera utilizando varios parámetros como columnas, filtros, y condiciones IN
, NOT IN
, y otras cláusulas como GROUP BY
. También tiene la opción de aplicar seguridad a través de filtros adicionales. Si ocurre algún error durante el proceso, devuelve un array con los detalles del error, de lo contrario, devuelve el número de registros encontrados.
Signatura
final public function cuenta_bis(bool $aplica_seguridad = true, array $columnas =array(),
array $columnas_by_table = array(), bool $columnas_en_bruto = false,
bool $con_sq = true, array $diferente_de = array(), array $extra_join = array(),
array $filtro=array(), array $filtro_especial= array(),
array $filtro_extra = array(), array $filtro_fecha = array(),
array $filtro_rango = array(), array $group_by=array(), array $hijo = array(),
array $in = array(), array $not_in = array(), string $sql_extra = '',
string $tipo_filtro='numeros'): array|int
Parámetros
bool $aplica_seguridad
(opcional)
- Tipo:
bool
- Descripción: Indica si se deben aplicar los filtros de seguridad al realizar la consulta.
- Valor predeterminado:
true
.
array $columnas
(opcional)
- Tipo:
array
- Descripción: Un array de columnas que se incluirán en la consulta.
array $columnas_by_table
(opcional)
- Tipo:
array
- Descripción: Define las columnas organizadas por tabla, útil para identificar la tabla de origen de cada columna.
bool $columnas_en_bruto
(opcional)
- Tipo:
bool
- Descripción: Indica si las columnas deben tratarse de forma directa (en bruto) sin transformaciones.
- Valor predeterminado:
false
.
bool $con_sq
(opcional)
- Tipo:
bool
- Descripción: Define si se deben incluir subconsultas (
subqueries
) en la consulta generada. - Valor predeterminado:
true
.
array $diferente_de
(opcional)
- Tipo:
array
- Descripción: Un array de condiciones que excluyen ciertos valores (
!=
) en la consulta SQL.
array $extra_join
(opcional)
- Tipo:
array
- Descripción: Define las cláusulas
JOIN
adicionales que se incluirán en la consulta.
array $filtro
(opcional)
- Tipo:
array
- Descripción: Un array de filtros generales que se aplicarán en la cláusula
WHERE
.
array $filtro_especial
(opcional)
- Tipo: `array**
- Descripción: Condiciones especiales que se aplicarán en la consulta.
array $filtro_extra
(opcional)
- Tipo:
array
- Descripción: Filtros adicionales que se aplicarán en la consulta SQL.
array $filtro_fecha
(opcional)
- Tipo: `array**
- Descripción: Filtros basados en fechas que se aplicarán a la consulta SQL.
array $filtro_rango
(opcional)
- Tipo: `array**
- Descripción: Rango de valores que se aplicará en la consulta SQL.
array $group_by
(opcional)
- Tipo: `array**
- Descripción: Las columnas que serán utilizadas en la cláusula
GROUP BY
.
array $hijo
(opcional)
- Tipo: `array**
- Descripción: Define relaciones hijo o subconsultas que se incluirán en la consulta.
array $in
(opcional)
- Tipo: `array**
- Descripción: Condiciones
IN
que se aplicarán a las columnas en la consulta SQL.
array $not_in
(opcional)
- Tipo: `array**
- Descripción: Condiciones
NOT IN
que se aplicarán a las columnas en la consulta SQL.
string $sql_extra
(opcional)
- Tipo: `string**
- Descripción: SQL adicional que puede agregarse a la consulta.
string $tipo_filtro
(opcional)
- Tipo: `string**
- Descripción: Define el tipo de filtro que se utilizará (
AND
,OR
,numeros
). - Valor predeterminado:
'numeros'
.
Retorno
array|int
- Tipo:
array
oint
- Descripción:
- Si la operación es exitosa, devuelve el número total de registros como un entero.
- Si ocurre un error en cualquier parte del proceso, devuelve un array con un mensaje de error y los detalles del problema.
Explicación Detallada
-
Validación del tipo de filtro:
- La función comienza validando el tipo de filtro (
$tipo_filtro
) utilizandoverifica_tipo_filtro
. Si no es válido, se devuelve un error.
$verifica_tf = (new \gamboamartin\where\where())->verifica_tipo_filtro(tipo_filtro: $tipo_filtro); if (errores::$error) { return $this->error->error(mensaje: 'Error al validar tipo_filtro', data: $verifica_tf); }
- La función comienza validando el tipo de filtro (
-
Aplicación de filtros de seguridad:
- Si la seguridad está habilitada (tanto en la instancia de la clase como en el parámetro
$aplica_seguridad
), se añaden los filtros de seguridad al array de filtros.
if ($this->aplica_seguridad && $aplica_seguridad) { $filtro = array_merge($filtro, $this->filtro_seguridad); }
- Si la seguridad está habilitada (tanto en la instancia de la clase como en el parámetro
-
Generación de la consulta SQL:
- Se llama a la función
genera_sql_filtro
para construir la consulta SQL, configurada para contar los registros (count: true
). Si ocurre un error durante este paso, se devuelve un array de error.
$sql = $this->genera_sql_filtro( columnas: $columnas, columnas_by_table: $columnas_by_table, columnas_en_bruto: $columnas_en_bruto, con_sq: $con_sq, diferente_de: $diferente_de, extra_join: $extra_join, filtro: $filtro, filtro_especial: $filtro_especial, filtro_extra: $filtro_extra, filtro_rango: $filtro_rango, group_by: $group_by, in: $in, limit: 0, not_in: $not_in, offset: 0, order: array(), sql_extra: $sql_extra, tipo_filtro: $tipo_filtro, count: true, filtro_fecha: $filtro_fecha); if (errores::$error) { return $this->error->error(mensaje: 'Error al maquetar sql', data: $sql); }
- Se llama a la función
-
Ejecución de la consulta:
- Luego, se ejecuta la consulta llamando a
ejecuta_consulta
. Si ocurre algún error, se devuelve un array con los detalles del error.
$result = $this->ejecuta_consulta(consulta: $sql, campos_encriptados: $this->campos_encriptados, hijo: $hijo); if (errores::$error) { return $this->error->error(mensaje: 'Error al ejecutar sql', data: $result); }
- Luego, se ejecuta la consulta llamando a
-
Retorno del número de registros:
- Si la consulta se ejecuta correctamente, se devuelve el número total de registros encontrados como un entero.
return (int)$result->registros[0]['total_registros'];
Ejemplo de uso
$columnas = ['id', 'nombre'];
$filtro = ['estatus' => 'activo'];
$resultado = $this->cuenta_bis(aplica_seguridad: true, columnas: $columnas, filtro: $filtro);
// Resultado esperado:
// Número total de registros que cumplen con los filtros aplicados.
Código de la Función
final public function cuenta_bis(bool $aplica_seguridad = true, array $columnas =array(),
array $columnas_by_table = array(), bool $columnas_en_bruto = false,
bool $con_sq = true, array $diferente_de = array(), array $extra_join = array(),
array $filtro=array(), array $filtro_especial= array(),
array $filtro_extra = array(), array $filtro_fecha = array(),
array $filtro_rango = array(), array $group_by=array(), array $hijo = array(),
array $in = array(), array $not_in = array(), string $sql_extra = '',
string $tipo_filtro='numeros'): array|int
{
$verifica_tf = (new \gamboamartin\where\where())->verifica_tipo_filtro(tipo_filtro: $tipo_filtro);
if(errores::$error){
return $this->error->error(mensaje: 'Error al validar tipo_filtro',data: $verifica_tf);
}
if($this->aplica_seguridad && $aplica_seguridad) {
$filtro = array_merge($filtro, $this->filtro_seguridad);
}
$sql = $this->genera_sql_filtro(columnas: $columnas, columnas_by_table: $columnas_by_table,
columnas_en_bruto: $columnas_en_bruto, con_sq: $con_sq, diferente_de: $diferente_de,
extra_join: $extra_join, filtro: $filtro, filtro_especial: $filtro_especial, filtro_extra: $filtro_extra,
filtro_rango: $filtro_rango, group_by: $group_by, in: $in, limit: 0, not_in: $not_in, offset: 0,
order: array(), sql_extra: $sql_extra, tipo_filtro: $tipo_filtro, count: true, filtro_fecha: $filtro_fecha);
if(errores::$error){
return $this->error->error(mensaje: 'Error al maquetar sql',data:$sql);
}
$result = $this->ejecuta_consulta(consulta:$sql,campos_encriptados: $this->campos_encriptados, hijo: $hijo);
if(errores::$error){
return $this->error->error(mensaje:'Error al ejecutar sql',data:$result);
}
return (int)$result->registros[0]['total_registros'];
}