src.where.genera_filtro_rango_base - gamboamartin/where GitHub Wiki
genera_filtro_rango_base
La función genera_filtro_rango_base
es una función privada que construye una cláusula SQL BETWEEN
para un campo específico utilizando un rango de valores proporcionado en un filtro. La función valida que los datos sean correctos, genera la condición SQL BETWEEN
y la integra en una cadena SQL existente.
Signatura
private function genera_filtro_rango_base(string $campo, array $filtro, string $filtro_rango_sql, bool $valor_campo = false):array|string
Parámetros
-
string $campo
:
El nombre del campo sobre el cual se aplicará la condiciónBETWEEN
. Esta cadena se limpia de espacios en blanco antes de ser procesada. -
array $filtro
:
Un array que debe contener dos claves,valor1
yvalor2
, que representan los valores de inicio y fin del rango para la condiciónBETWEEN
. -
string $filtro_rango_sql
:
La cadena SQL existente a la que se le agregará la nueva condiciónBETWEEN
. Esta cadena también se limpia de espacios en blanco antes de ser procesada. -
bool $valor_campo
(opcional):
Un valor booleano que determina si el campo debe ser tratado como un valor literal entre comillas en la cláusula SQL. Por defecto, esfalse
, lo que significa que el campo será tratado como una columna SQL.
Retorna
array|string
:
Retorna una cadena que representa la cláusula SQL combinada con el filtro de rango generado. En caso de error, retorna un array de error generado por$this->error->error()
.
Explicación Detallada
-
Limpieza y validación del campo:
- La función elimina los espacios en blanco al inicio y al final de la cadena
$campo
usandotrim()
. - Si el campo resulta vacío después de la limpieza, se genera un mensaje de error y se retorna un array con el mensaje de error.
- La función elimina los espacios en blanco al inicio y al final de la cadena
-
Validación de las claves necesarias en el filtro:
- La función verifica que el array
$filtro
contenga las clavesvalor1
yvalor2
utilizandovalida_existencia_keys()
. - Si alguna de estas claves no está presente en el filtro, se genera un mensaje de error y se retorna un array con el mensaje de error.
- La función verifica que el array
-
Generación de la condición SQL
BETWEEN
:- La función llama a
condicion_entre()
para generar la cláusula SQLBETWEEN
utilizando el campo y los valores del filtro. - Si ocurre un error durante la generación de la condición, se genera un mensaje de error y se retorna un array con el mensaje de error.
- La función llama a
-
Integración de la condición en la cadena SQL existente:
- La función llama a
setea_filtro_rango()
para combinar la condiciónBETWEEN
generada con la cadena SQL existente en$filtro_rango_sql
. - Si ocurre un error durante la integración, se genera un mensaje de error y se retorna un array con el mensaje de error.
- La función llama a
-
Retorno de la cláusula SQL combinada:
- La función retorna la cadena
$filtro_rango_sql_r
que representa la cláusula SQL combinada con el filtro de rango.
- La función retorna la cadena
Ejemplos
$campo = 'fecha';
$filtro = ['valor1' => '2023-01-01', 'valor2' => '2023-12-31'];
$filtro_rango_sql = '';
$valor_campo = false;
$resultado = $this->genera_filtro_rango_base($campo, $filtro, $filtro_rango_sql, $valor_campo);
// Resultado esperado:
// "fecha BETWEEN '2023-01-01' AND '2023-12-31'"
// Un array de error si ocurre algún problema.
Código de la Función
private function genera_filtro_rango_base(string $campo, array $filtro, string $filtro_rango_sql,
bool $valor_campo = false):array|string
{
$campo = trim($campo);
if($campo === ''){
return $this->error->error(mensaje: 'Error $campo no puede venir vacio',data: $campo, es_final: true);
}
$keys = array('valor1','valor2');
$valida = $this->validacion->valida_existencia_keys(keys:$keys, registro: $filtro);
if(errores::$error){
return $this->error->error(mensaje: 'Error al validar filtro',data: $valida);
}
$condicion = $this->condicion_entre(campo: $campo,filtro: $filtro,valor_campo: $valor_campo);
if(errores::$error){
return $this->error->error(mensaje: 'Error al generar condicion',data: $condicion);
}
$filtro_rango_sql_r = $this->setea_filtro_rango(condicion: $condicion, filtro_rango_sql: $filtro_rango_sql);
if(errores::$error){
return $this->error->error(mensaje: 'Error $filtro_rango_sql al setear',data: $filtro_rango_sql_r);
}
return $filtro_rango_sql_r;
}