src.where.genera_filtro_rango_base - gamboamartin/where GitHub Wiki

genera_filtro_rango_base

La función genera_filtro_rango_base es una función privada que construye una cláusula SQL BETWEEN para un campo específico utilizando un rango de valores proporcionado en un filtro. La función valida que los datos sean correctos, genera la condición SQL BETWEEN y la integra en una cadena SQL existente.

Signatura

private function genera_filtro_rango_base(string $campo, array $filtro, string $filtro_rango_sql, bool $valor_campo = false):array|string

Parámetros

  • string $campo:
    El nombre del campo sobre el cual se aplicará la condición BETWEEN. Esta cadena se limpia de espacios en blanco antes de ser procesada.

  • array $filtro:
    Un array que debe contener dos claves, valor1 y valor2, que representan los valores de inicio y fin del rango para la condición BETWEEN.

  • string $filtro_rango_sql:
    La cadena SQL existente a la que se le agregará la nueva condición BETWEEN. Esta cadena también se limpia de espacios en blanco antes de ser procesada.

  • bool $valor_campo (opcional):
    Un valor booleano que determina si el campo debe ser tratado como un valor literal entre comillas en la cláusula SQL. Por defecto, es false, lo que significa que el campo será tratado como una columna SQL.

Retorna

  • array|string:
    Retorna una cadena que representa la cláusula SQL combinada con el filtro de rango generado. En caso de error, retorna un array de error generado por $this->error->error().

Explicación Detallada

  1. Limpieza y validación del campo:

    • La función elimina los espacios en blanco al inicio y al final de la cadena $campo usando trim().
    • Si el campo resulta vacío después de la limpieza, se genera un mensaje de error y se retorna un array con el mensaje de error.
  2. Validación de las claves necesarias en el filtro:

    • La función verifica que el array $filtro contenga las claves valor1 y valor2 utilizando valida_existencia_keys().
    • Si alguna de estas claves no está presente en el filtro, se genera un mensaje de error y se retorna un array con el mensaje de error.
  3. Generación de la condición SQL BETWEEN:

    • La función llama a condicion_entre() para generar la cláusula SQL BETWEEN utilizando el campo y los valores del filtro.
    • Si ocurre un error durante la generación de la condición, se genera un mensaje de error y se retorna un array con el mensaje de error.
  4. Integración de la condición en la cadena SQL existente:

    • La función llama a setea_filtro_rango() para combinar la condición BETWEEN generada con la cadena SQL existente en $filtro_rango_sql.
    • Si ocurre un error durante la integración, se genera un mensaje de error y se retorna un array con el mensaje de error.
  5. Retorno de la cláusula SQL combinada:

    • La función retorna la cadena $filtro_rango_sql_r que representa la cláusula SQL combinada con el filtro de rango.

Ejemplos

$campo = 'fecha';
$filtro = ['valor1' => '2023-01-01', 'valor2' => '2023-12-31'];
$filtro_rango_sql = '';
$valor_campo = false;

$resultado = $this->genera_filtro_rango_base($campo, $filtro, $filtro_rango_sql, $valor_campo);

// Resultado esperado:
// "fecha BETWEEN '2023-01-01' AND '2023-12-31'"
// Un array de error si ocurre algún problema.

Código de la Función

private function genera_filtro_rango_base(string $campo, array $filtro, string $filtro_rango_sql,
                                              bool $valor_campo = false):array|string
    {
        $campo = trim($campo);
        if($campo === ''){
            return  $this->error->error(mensaje: 'Error $campo no puede venir vacio',data: $campo, es_final: true);
        }
        $keys = array('valor1','valor2');
        $valida = $this->validacion->valida_existencia_keys(keys:$keys, registro: $filtro);
        if(errores::$error){
            return  $this->error->error(mensaje: 'Error al validar filtro',data: $valida);
        }

        $condicion = $this->condicion_entre(campo: $campo,filtro:  $filtro,valor_campo:  $valor_campo);
        if(errores::$error){
            return  $this->error->error(mensaje: 'Error al generar condicion',data: $condicion);
        }

        $filtro_rango_sql_r = $this->setea_filtro_rango(condicion: $condicion, filtro_rango_sql: $filtro_rango_sql);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error $filtro_rango_sql al setear',data: $filtro_rango_sql_r);
        }

        return $filtro_rango_sql_r;
    }