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,valor1yvalor2, 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 SQLBETWEENgenerada. 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
$campousandotrim(). - 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
$filtrocontenga las clavesvalor1yvalor2. - 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_campoesfalse, se genera una cláusulaBETWEENutilizando el campo como una columna SQL, y los valoresvalor1yvalor2como literales entre comillas simples. - Si
$valor_campoestrue, el campo se trata como un valor literal entre comillas, y los valoresvalor1yvalor2se utilizan directamente sin comillas.
- Si
-
Retorno de la cláusula SQL:
- La función retorna la cadena
$condicionque representa la cláusula SQLBETWEENgenerada.
- 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;
}