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_sql
está vacío, se inicializa con el valor de$data_sql
.
- Si
-
Validación del filtro especial:
- Si
$filtro_especial_sql
ya contiene una cláusula SQL, la función verifica si existe una configuración de comparación en el array$filtro_esp
para el campo especificado. - Si la clave
comparacion
no 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_sql
no esté vacío después de ser limpiado contrim()
. Si$data_sql
está 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_sql
a 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_sql
que 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;
}