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

  1. Inicialización de la cláusula SQL:

    • Si $filtro_especial_sql está vacío, se inicializa con el valor de $data_sql.
  2. 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 con trim(). Si $data_sql está vacío, se genera un mensaje de error y se retorna un array con el mensaje de error.
  3. 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.
  4. Retorno de la cláusula SQL generada:

    • La función retorna la cadena $filtro_especial_sql que representa la cláusula SQL especializada generada.

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