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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Combinación de las cláusulas SQL:

    • Las cláusulas SQL generadas para cada filtro se combinan en una única cadena $filtro_especial_sql.
  6. 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.

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;
    }