administrador.base.orm.where.maqueta_filtro_especial - gamboamartin/where GitHub Wiki
maqueta_filtro_especial
La función maqueta_filtro_especial
es una función privada que construye una condición SQL personalizada basada en un campo específico, columnas extra y un filtro. La función realiza varias validaciones antes de generar la cadena SQL que representa el filtro.
Signatura
private function maqueta_filtro_especial(string $campo, array $columnas_extra, array $filtro):array|string{
Parámetros
$campo (string): Nombre del campo de la base de datos que se desea filtrar. Este campo será procesado y validado para asegurar su corrección.
$columnas_extra (array): Array que contiene información adicional sobre las columnas que podrían ser necesarias para ajustar la condición SQL. Este array se utiliza en la generación del campo de filtro especial.
$filtro (array): Array asociativo que contiene los filtros que se aplicarán. Debe incluir al menos la clave 'valor' dentro del subarray asociado a $campo.
[
'campo' => [
'valor' => 'valor_a_filtrar', // Valor que se utilizará para construir la condición SQL
...
],
...
]
Retorna
- array|string: Retorna una cadena SQL que representa la condición de filtro construida o un array con un mensaje de error en caso de que ocurra algún problema.
Explicación Detallada
-
Preparación y Validación Inicial del Campo:
-
- La función comienza por limpiar el campo (trim) para eliminar espacios en blanco innecesarios. Luego, valida el filtro utilizando la función valida_data_filtro_especial de la clase validaciones. Si esta validación falla, se devuelve un error.
-
Validación de la Existencia de Claves en el Filtro:
-
- La función valida que el filtro contenga la clave 'valor', que es esencial para construir la condición SQL. Si falta esta clave, se devuelve un error.
-
Generación del Campo de Filtro Especial:
-
- Se genera un campo de filtro especial utilizando la función campo_filtro_especial de la clase where. Este paso adapta el campo original en función de las columnas adicionales proporcionadas. Si ocurre algún error, se devuelve un mensaje de error.
-
Generación de la Cadena SQL:
-
- Se construye la cadena SQL utilizando la función data_sql de la clase where. Si hay algún error durante la generación de la SQL, se retorna un mensaje de error.
-
Retorno del SQL Generado:
-
- Finalmente, se retorna la cadena SQL generada.
Ejemplos
$campo = 'nombre';
$columnas_extra = ['apellido'];
$filtro = [
'nombre' => [
'valor' => 'Juan',
]
];
$sql = $this->maqueta_filtro_especial($campo, $columnas_extra, $filtro);
// Resultado esperado: "nombre = 'Juan'"
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 = (new \gamboamartin\where\where())->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 = (new \gamboamartin\where\where())->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;
}