administrador.base.orm.where.filtro_especial_sql - gamboamartin/administrador GitHub Wiki
filtro_especial_sql
La función filtro_especial_sql
es una función privada que genera una cláusula SQL completa basada en una serie de filtros especiales aplicados a diferentes campos. La función procesa cada filtro especial, valida su formato, y genera la parte SQL correspondiente utilizando una función auxiliar. Todas las cláusulas generadas se combinan en una única cadena SQL.
Signatura
private function filtro_especial_sql(array $columnas_extra, array $filtro_especial):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_especial
:
Un array que contiene múltiples filtros especiales que se van a aplicar a diferentes campos. Cada elemento del array debe ser un subarray que contenga las condiciones y valores del filtro especial para un campo específico.
Retorna
array|string
:
Retorna una cadena que representa la cláusula SQL completa generada a partir de los filtros especiales. En caso de error, retorna un array de error generado por$this->error->error()
.
Explicación Detallada
-
Inicialización de la cláusula SQL:
- La función inicializa la variable
$filtro_especial_sql
como una cadena vacía. Esta variable será utilizada para construir la cláusula SQL a partir de los filtros especiales.
- La función inicializa la variable
-
Iteración sobre los filtros especiales:
- La función itera sobre cada entrada en el array
$filtro_especial
, donde la clave representa el nombre del campo y el valor es el subarray que contiene el filtro especial.
- La función itera sobre cada entrada en el array
-
Validación de cada filtro especial:
- Para cada filtro, la función verifica que sea un array. Si el filtro no es un array, se genera un mensaje de error y se retorna un array con el mensaje de error.
-
Generación de la cláusula SQL para cada filtro:
- La función llama a
obten_filtro_especial()
para generar la cláusula SQL correspondiente a cada filtro especial, utilizando el nombre del campo, las columnas adicionales, y la cadena SQL generada hasta ese punto. - 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
-
Combinación de las cláusulas SQL:
- Las cláusulas SQL generadas para cada filtro se combinan en una única cadena
$filtro_especial_sql
.
- Las cláusulas SQL generadas para cada filtro se combinan en una única cadena
-
Retorno de la cláusula SQL completa:
- La función retorna la cadena
$filtro_especial_sql
que representa la cláusula SQL completa generada a partir de los filtros especiales.
- La función retorna la cadena
Ejemplos
$columnas_extra = ['precio' => 'precio_ajustado'];
$filtro_especial = [
'precio' => ['valor' => 100, 'comparacion' => '>'],
'fecha' => ['valor' => '2024-01-01', 'comparacion' => '<=']
];
$resultado = $this->filtro_especial_sql($columnas_extra, $filtro_especial);
// Resultado esperado:
// Una cadena SQL que representa los filtros especiales aplicados a los campos 'precio' y 'fecha'.
// Un array de error si ocurre algún problema.
Código de la Función
private function filtro_especial_sql(array $columnas_extra, array $filtro_especial):array|string
{
$filtro_especial_sql = '';
foreach ($filtro_especial as $campo=>$filtro_esp){
if(!is_array($filtro_esp)){
return $this->error->error(mensaje: "Error filtro debe ser un array filtro_especial[] = array()",
data: $filtro_esp, es_final: true);
}
$filtro_especial_sql = $this->obten_filtro_especial(columnas_extra: $columnas_extra,
filtro_esp: $filtro_esp, filtro_especial_sql: $filtro_especial_sql);
if(errores::$error){
return $this->error->error(mensaje:"Error filtro", data: $filtro_especial_sql);
}
}
return $filtro_especial_sql;
}