src.where.condicion_entre - gamboamartin/where GitHub Wiki
condicion_entre
La función condicion_entre
es una función privada que genera una cláusula SQL BETWEEN
para filtrar un campo con un rango de valores. La función valida la entrada, asegurándose de que el campo y los valores de filtro no estén vacíos, y luego construye la cláusula SQL adecuada.
Signatura
private function condicion_entre(string $campo, array $filtro, bool $valor_campo): string|array
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
. -
bool $valor_campo
:
Un valor booleano que determina si el campo debe ser tratado como un valor literal entre comillas en la cláusula SQL. Si estrue
, el campo será tratado como un valor literal.
Retorna
string|array
:
Retorna una cadena que representa la cláusula SQLBETWEEN
generada. 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 del inicio y 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 del inicio y final de la cadena
-
Validación de los valores en el filtro:
- La función verifica que el array
$filtro
contenga las clavesvalor1
yvalor2
. - Si alguna de estas claves no está presente, se genera un mensaje de error y se retorna un array con el mensaje de error.
- La función verifica que el array
-
Construcción de la cláusula SQL
BETWEEN
:- Si
$valor_campo
esfalse
, se genera una cláusulaBETWEEN
utilizando el campo como una columna SQL, y los valoresvalor1
yvalor2
como literales entre comillas simples. - Si
$valor_campo
estrue
, el campo se trata como un valor literal entre comillas, y los valoresvalor1
yvalor2
se utilizan directamente sin comillas.
- Si
-
Retorno de la cláusula SQL:
- La función retorna la cadena
$condicion
que representa la cláusula SQLBETWEEN
generada.
- La función retorna la cadena
Ejemplos
$campo = 'fecha';
$filtro = ['valor1' => '2023-01-01', 'valor2' => '2023-12-31'];
$valor_campo = false;
$resultado = $this->condicion_entre($campo, $filtro, $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 condicion_entre(string $campo, array $filtro, bool $valor_campo): string|array
{
$campo = trim($campo);
if($campo === ''){
return $this->error->error(mensaje: 'Error campo vacío', data: $campo, es_final: true);
}
if(!isset($filtro['valor1'])){
return $this->error->error(mensaje: 'Error campo vacío $filtro[valor1]', data: $campo, es_final: true);
}
if(!isset($filtro['valor2'])){
return $this->error->error(mensaje: 'Error campo vacío $filtro[valor2]', data: $campo, es_final: true);
}
$condicion = $campo . ' BETWEEN ' ."'" .$filtro['valor1'] . "'"." AND "."'".$filtro['valor2'] . "'";
if($valor_campo){
$condicion = "'".$campo."'" . ' BETWEEN ' .$filtro['valor1'] ." AND ".$filtro['valor2'];
}
return $condicion;
}