src.where.genera_filtro_especial - gamboamartin/where GitHub Wiki
genera_filtro_especial
La función genera_filtro_especial es una función pública que construye una cláusula SQL especializada basada en un filtro personalizado. La función toma en cuenta el campo, los datos SQL, y las condiciones de comparación específicas definidas en el array de filtros especiales para generar una cláusula SQL que se puede agregar a una consulta.
Signatura
final public function genera_filtro_especial(string $campo, string $data_sql, array $filtro_esp, string $filtro_especial_sql):array|string
Parámetros
-
string $campo:
El nombre del campo para el cual se está generando el filtro especial. Este campo se utiliza como clave para acceder a las configuraciones específicas en el array de filtros especiales. -
string $data_sql:
La cadena SQL que representa los datos que se desean filtrar. Esta cadena se incorpora en la cláusula SQL generada. -
array $filtro_esp:
Un array que contiene las configuraciones de filtros especiales. Cada campo puede tener configuraciones específicas como el tipo de comparación que se debe utilizar en la cláusula SQL. -
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$data_sql.
Retorna
array|string:
Retorna una cadena que representa la cláusula SQL especializada generada. En caso de error, retorna un array de error generado por$this->error->error().
Explicación Detallada
-
Inicialización de la cláusula SQL:
- Si
$filtro_especial_sqlestá vacío, se inicializa con el valor de$data_sql.
- Si
-
Validación del filtro especial:
- Si
$filtro_especial_sqlya contiene una cláusula SQL, la función verifica si existe una configuración de comparación en el array$filtro_esppara el campo especificado. - Si la clave
comparacionno existe en$filtro_esp[$campo], se genera un mensaje de error y se retorna un array con el mensaje de error. - La función también valida que
$data_sqlno esté vacío después de ser limpiado contrim(). Si$data_sqlestá vacío, se genera un mensaje de error y se retorna un array con el mensaje de error.
- Si
-
Construcción de la cláusula SQL:
- Si la validación es exitosa, se agrega la comparación definida en
$filtro_esp[$campo]['comparacion']junto con$data_sqla la cadena$filtro_especial_sql.
- Si la validación es exitosa, se agrega la comparación definida en
-
Retorno de la cláusula SQL generada:
- La función retorna la cadena
$filtro_especial_sqlque representa la cláusula SQL especializada generada.
- La función retorna la cadena
Ejemplos
$campo = 'precio';
$data_sql = '100';
$filtro_esp = [
'precio' => ['comparacion' => '>']
];
$filtro_especial_sql = '';
$resultado = $this->genera_filtro_especial($campo, $data_sql, $filtro_esp, $filtro_especial_sql);
// Resultado esperado:
// '100 > 100' si $filtro_especial_sql ya tenía un valor.
// Un array de error si ocurre algún problema.
Código de la Función
final public function genera_filtro_especial(
string $campo, string $data_sql, array $filtro_esp, string $filtro_especial_sql):array|string
{
if($filtro_especial_sql === ''){
$filtro_especial_sql .= $data_sql;
}
else{
if(!isset($filtro_esp[$campo]['comparacion'])){
return $this->error->error(mensaje: 'Error $filtro_esp[$campo][\'comparacion\'] debe existir',
data: $filtro_esp, es_final: true);
}
if(trim($data_sql) === ''){
return $this->error->error(mensaje:'Error $data_sql no puede venir vacio', data:$data_sql,
es_final: true);
}
$filtro_especial_sql .= ' '.$filtro_esp[$campo]['comparacion'].' '.$data_sql;
}
return $filtro_especial_sql;
}