src.where.datos_filtro_especial - gamboamartin/where GitHub Wiki
datos_filtro_especial
La función datos_filtro_especial
es una función privada que extrae y valida los datos necesarios para construir una condición SQL basada en un filtro especial. La función verifica que los elementos esenciales estén presentes en el array de entrada y luego construye una estructura stdClass
que contiene la información necesaria para generar una cláusula SQL.
Signatura
private function datos_filtro_especial(array $data_filtro):array|stdClass
Parámetros
array $data_filtro
:
Un array asociativo que contiene los datos del filtro especial. Este array debe incluir las clavesoperador
,valor
ycomparacion
, asociadas al campo que se va a utilizar en la condición SQL.
Retorna
array|stdClass
:
Retorna un objetostdClass
que contiene los detalles del filtro especial, incluyendo el campo, el operador, el valor, la comparación y la condición SQL generada. En caso de error, retorna un array de error generado por$this->error->error()
.
Explicación Detallada
-
Verificación de que el array no esté vacío:
- La función verifica si el array
$data_filtro
tiene al menos un elemento. Si está vacío, genera un mensaje de error y retorna un array con el mensaje de error.
- La función verifica si el array
-
Extracción y validación de la clave del campo:
- La función llama a
campo_data_filtro()
para extraer y validar la clave del campo del array$data_filtro
. - Si ocurre un error durante esta extracción, se genera un mensaje de error y se retorna un array con el mensaje de error.
- La función llama a
-
Validación de la existencia del operador:
- La función verifica que el campo extraído contenga una clave
operador
. Si no existe, se genera un mensaje de error y se retorna un array con el mensaje de error. - Si el operador está presente pero es una cadena vacía, se genera un mensaje de error y se retorna un array con el mensaje de error.
- La función verifica que el campo extraído contenga una clave
-
Validación de la existencia del valor y la comparación:
- La función verifica que el campo extraído contenga las claves
valor
ycomparacion
. Si alguna de estas claves falta, se genera un mensaje de error y se retorna un array con el mensaje de error. - Si el valor está presente pero es una cadena vacía, se genera un mensaje de error y se retorna un array con el mensaje de error.
- La función verifica que el campo extraído contenga las claves
-
Construcción de la condición SQL:
- La función genera la condición SQL utilizando el campo, el operador y el valor, escapando los caracteres especiales del valor con
addslashes()
para prevenir inyecciones SQL.
- La función genera la condición SQL utilizando el campo, el operador y el valor, escapando los caracteres especiales del valor con
-
Retorno del objeto
stdClass
:- La función retorna un objeto
stdClass
que contiene los siguientes atributos:campo
: El nombre del campo.operador
: El operador SQL a utilizar (por ejemplo,=
,LIKE
).valor
: El valor a comparar.comparacion
: El tipo de comparación a realizar.condicion
: La condición SQL completa generada.
- La función retorna un objeto
Ejemplos
$data_filtro = [
'precio' => [
'operador' => '=',
'valor' => '100',
'comparacion' => 'AND'
]
];
$resultado = $this->datos_filtro_especial($data_filtro);
// Resultado esperado:
// Un objeto stdClass con los atributos:
// - campo: "precio"
// - operador: "="
// - valor: "100"
// - comparacion: "AND"
// - condicion: "precio='100'"
// Un array de error si ocurre algún problema.
Código de la Función
private function datos_filtro_especial(array $data_filtro):array|stdClass
{
if(count($data_filtro) === 0){
return $this->error->error(mensaje:'Error data_filtro esta vacio', data:$data_filtro, es_final: true);
}
$campo = $this->campo_data_filtro(data_filtro: $data_filtro);
if(errores::$error){
return $this->error->error(mensaje:'Error al obtener campo',data: $campo);
}
if(!isset($data_filtro[$campo]['operador'])){
return $this->error->error(mensaje:'Error data_filtro['.$campo.'][operador] debe existir',
data:$data_filtro, es_final: true);
}
$operador = $data_filtro[$campo]['operador'];
if($operador===''){
return $this->error->error(mensaje:'Error el operador debe de existir',data:$operador, es_final: true);
}
if(!isset($data_filtro[$campo]['valor'])){
return $this->error->error(mensaje:'Error data_filtro['.$campo.'][valor] debe existir',
data:$data_filtro, es_final: true);
}
if(!isset($data_filtro[$campo]['comparacion'])){
return $this->error->error(mensaje:'Error data_filtro['.$campo.'][comparacion] debe existir',
data:$data_filtro, es_final: true);
}
$valor = $data_filtro[$campo]['valor'];
if($valor===''){
return $this->error->error(mensaje:'Error el operador debe de existir',data:$valor, es_final: true);
}
$valor = addslashes($valor);
$comparacion = $data_filtro[$campo]['comparacion'];
$condicion = $campo.$operador."'$valor'";
$datos = new stdClass();
$datos->campo = $campo;
$datos->operador = $operador;
$datos->valor = $valor;
$datos->comparacion = $comparacion;
$datos->condicion = $condicion;
return $datos;
}