src.where.maqueta_filtro_especial - gamboamartin/where GitHub Wiki
maqueta_filtro_especial
La función maqueta_filtro_especial
es una función privada que se encarga de construir una cláusula SQL basada en un filtro especial aplicado a un campo específico. La función valida el filtro, ajusta el campo si es necesario y genera la parte correspondiente de la sentencia SQL.
Signatura
private function maqueta_filtro_especial(string $campo, array $columnas_extra, array $filtro):array|string
Parámetros
-
string $campo
:
El nombre del campo al que se va a aplicar el filtro especial. Esta cadena se limpia de espacios en blanco antes de ser procesada. -
array $columnas_extra
:
Un array que contiene columnas adicionales que pueden ser utilizadas para ajustar el campo si es necesario. Este array permite mapear un campo a otro nombre o formato si se requiere. -
array $filtro
:
Un array que contiene las condiciones y valores del filtro especial que se va a aplicar al campo. Este array debe incluir, al menos, la clavevalor
, que representa el valor que se va a utilizar en el filtro.
Retorna
array|string
:
Retorna una cadena que representa la parte de la sentencia SQL generada para el filtro especial. En caso de error, retorna un array de error generado por$this->error->error()
.
Explicación Detallada
-
Limpieza del nombre del campo:
- La función utiliza
trim()
para eliminar espacios en blanco al inicio y al final del nombre del campo.
- La función utiliza
-
Validación del filtro especial:
- La función llama a
valida_data_filtro_especial()
de la clasevalidaciones
para validar la estructura y el contenido del filtro especial. - Si ocurre un error durante la validació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 de claves:
- La función verifica que el array de filtro contenga la clave
valor
utilizandovalida_existencia_keys()
. - Si la clave
valor
no existe 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 de filtro contenga la clave
-
Ajuste del campo:
- La función llama a
campo_filtro_especial()
para ajustar el nombre del campo en base al array decolumnas_extra
. - Si ocurre un error durante el ajuste, se genera un mensaje de error y se retorna un array con el mensaje de error.
- La función llama a
-
Generación de la cláusula SQL:
- La función llama a
data_sql()
para generar la cláusula SQL utilizando el campo ajustado y el valor del filtro. - Si ocurre un error durante la generación de la cláusula SQL, 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 generada:
- La función retorna la cadena que representa la parte de la sentencia SQL generada para el filtro especial.
Ejemplos
$campo = 'precio';
$columnas_extra = ['precio' => 'precio_ajustado'];
$filtro = [
'precio' => ['valor' => 100, 'comparacion' => '>']
];
$resultado = $this->maqueta_filtro_especial($campo, $columnas_extra, $filtro);
// Resultado esperado:
// Una cadena SQL que representa el filtro especial aplicado al campo 'precio'.
// Un array de error si ocurre algún problema.
Código de la Función
private function maqueta_filtro_especial(string $campo, array $columnas_extra, array $filtro):array|string
{
$campo = trim($campo);
$valida = (new validaciones())->valida_data_filtro_especial(campo: $campo,filtro: $filtro);
if(errores::$error){
return $this->error->error(mensaje: 'Error al validar filtro', data: $valida);
}
$keys = array('valor');
$valida = $this->validacion->valida_existencia_keys(keys: $keys, registro: $filtro[$campo]);
if(errores::$error){
return $this->error->error(mensaje:'Error al validar filtro', data:$valida);
}
$campo_filtro = $campo;
$campo = $this->campo_filtro_especial(campo: $campo,columnas_extra: $columnas_extra);
if(errores::$error){
return $this->error->error(mensaje:'Error al obtener campo', data:$campo);
}
$data_sql = $this->data_sql(campo: $campo,campo_filtro: $campo_filtro,filtro: $filtro);
if(errores::$error){
return $this->error->error(mensaje:'Error al genera sql', data:$data_sql);
}
return $data_sql;
}