src.where.integra_filtro_extra - gamboamartin/where GitHub Wiki

integra_filtro_extra

La función integra_filtro_extra es una función privada que se encarga de integrar un filtro adicional en una cláusula SQL existente. La función valida y extrae los datos del filtro, genera la condición SQL correspondiente, y luego combina esta condición con la cláusula SQL existente.

Signatura

private function integra_filtro_extra(array $data_filtro, string $filtro_extra_sql): object|string|array

Parámetros

  • array $data_filtro:
    Un array asociativo que contiene los datos del filtro especial. Este array debe incluir las claves operador, valor y comparacion, que son esenciales para construir la condición SQL.

  • string $filtro_extra_sql:
    La cláusula SQL existente a la que se le agregará la nueva condición generada a partir de $data_filtro.

Retorna

  • object|string|array:
    Retorna una cadena que representa la cláusula SQL combinada con la nueva condición generada. En caso de error, retorna un array de error generado por $this->error->error().

Explicación Detallada

  1. Validación del array $data_filtro:

    • La función verifica si el array $data_filtro está vacío. Si está vacío, se genera un mensaje de error y se retorna un array con el mensaje de error.
  2. Extracción de los datos del filtro:

    • La función llama a datos_filtro_especial() para extraer y validar los datos del filtro, como el campo, el operador, el valor, y la comparación.
    • Si ocurre un error durante la extracción de los datos del 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:

    • La función utiliza filtro_extra_sql_genera() para combinar la condición generada con la cláusula SQL existente ($filtro_extra_sql), utilizando la comparación definida en los datos del filtro.
    • Si ocurre un error durante la generación de la condición SQL, se genera un mensaje de error y se retorna un array con el mensaje de error.
  4. Retorno de la cláusula SQL combinada:

    • La función retorna la cadena $filtro_extra_sql que representa la cláusula SQL combinada con la nueva condición generada.

Ejemplos

$data_filtro = [
    'precio' => [
        'operador' => '=',
        'valor' => '100',
        'comparacion' => 'AND'
    ]
];
$filtro_extra_sql = "fecha >= '2023-01-01'";

$resultado = $this->integra_filtro_extra($data_filtro, $filtro_extra_sql);

// Resultado esperado:
// "fecha >= '2023-01-01' AND precio='100'"
// Un array de error si ocurre algún problema.

Código de la Función

private function integra_filtro_extra(array $data_filtro, string $filtro_extra_sql): object|string|array
    {
        if(count($data_filtro) === 0){
            return $this->error->error(mensaje:'Error data_filtro esta vacio',  data:$data_filtro, es_final: true);
        }

        $datos = $this->datos_filtro_especial(data_filtro: $data_filtro);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al obtener datos de filtro',data:  $datos);
        }

        $filtro_extra_sql = $this->filtro_extra_sql_genera(comparacion: $datos->comparacion,
            condicion:  $datos->condicion,filtro_extra_sql:  $filtro_extra_sql);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al generar filtro',data:  $filtro_extra_sql);
        }

        return $filtro_extra_sql;

    }