administrador.base.orm.where.obten_filtro_especial - gamboamartin/administrador GitHub Wiki
obten_filtro_especial
La función obten_filtro_especial
es una función privada que genera una cláusula SQL basada en un filtro especial aplicado a un campo específico. La función valida el filtro, genera la parte SQL correspondiente utilizando las columnas adicionales si es necesario, y construye la cláusula SQL final utilizando una clase externa para completar la operación.
Signatura
private function obten_filtro_especial(array $columnas_extra, array $filtro_esp, string $filtro_especial_sql):array|string
Parámetros
-
array $columnas_extra
:
Un array que contiene columnas adicionales que pueden ser utilizadas para ajustar los campos si es necesario. Este array permite mapear un campo a otro nombre o formato si se requiere. -
array $filtro_esp
:
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. -
string $filtro_especial_sql
:
La cadena SQL existente a la que se le agregará el filtro especial generado. Si está vacía, se inicializa con la parte SQL generada pormaqueta_filtro_especial()
.
Retorna
array|string
:
Retorna una cadena que representa la cláusula SQL generada para el filtro especial. En caso de error, retorna un array de error generado por$this->error->error()
.
Explicación Detallada
-
Obtención del campo del filtro:
- La función obtiene la clave del primer elemento en el array
filtro_esp
y la asigna a la variable$campo
. - La función limpia el nombre del campo utilizando
trim()
para eliminar espacios en blanco al inicio y al final.
- La función obtiene la clave del primer elemento en el array
-
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
-
Generación de la parte SQL del filtro:
- La función llama a
maqueta_filtro_especial()
para generar la parte SQL del filtro utilizando el campo y las columnas adicionales. - Si ocurre un error durante la generación del filtro, se genera un mensaje de error y se retorna un array con el mensaje de error.
- La función llama a
-
Construcción de la cláusula SQL utilizando una clase externa:
- La función llama a
genera_filtro_especial()
de la clase\gamboamartin\where\where()
para construir la cláusula SQL final combinando la parte SQL generada y cualquier filtro SQL existente en$filtro_especial_sql
. - Si ocurre un error durante la construcció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
$filtro_especial_sql_r
que representa la cláusula SQL generada para el filtro especial.
- La función retorna la cadena
Ejemplos
$columnas_extra = ['precio' => 'precio_ajustado'];
$filtro_esp = [
'precio' => ['valor' => 100, 'comparacion' => '>']
];
$filtro_especial_sql = '';
$resultado = $this->obten_filtro_especial($columnas_extra, $filtro_esp, $filtro_especial_sql);
// 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 obten_filtro_especial(
array $columnas_extra, array $filtro_esp, string $filtro_especial_sql):array|string
{
$campo = key($filtro_esp);
$campo = trim($campo);
$valida =(new validaciones())->valida_data_filtro_especial(campo: $campo,filtro: $filtro_esp);
if(errores::$error){
return $this->error->error(mensaje: "Error en filtro ", data: $valida);
}
$data_sql = $this->maqueta_filtro_especial(campo: $campo, columnas_extra: $columnas_extra,filtro: $filtro_esp);
if(errores::$error){
return $this->error->error(mensaje:"Error filtro", data:$data_sql);
}
$filtro_especial_sql_r = (new \gamboamartin\where\where())->genera_filtro_especial(campo: $campo,
data_sql: $data_sql, filtro_esp: $filtro_esp, filtro_especial_sql: $filtro_especial_sql);
if(errores::$error){
return $this->error->error(mensaje:"Error filtro",data: $filtro_especial_sql_r);
}
return $filtro_especial_sql_r;
}