src.where.maqueta_filtro_especial - gamboamartin/where GitHub Wiki

maqueta_filtro_especial

La función maqueta_filtro_especial es una función privada que se encarga de construir una cláusula SQL basada en un filtro especial aplicado a un campo específico. La función valida el filtro, ajusta el campo si es necesario y genera la parte correspondiente de la sentencia SQL.

Signatura

private function maqueta_filtro_especial(string $campo, array $columnas_extra, array $filtro):array|string

Parámetros

  • string $campo:
    El nombre del campo al que se va a aplicar el filtro especial. Esta cadena se limpia de espacios en blanco antes de ser procesada.

  • array $columnas_extra:
    Un array que contiene columnas adicionales que pueden ser utilizadas para ajustar el campo si es necesario. Este array permite mapear un campo a otro nombre o formato si se requiere.

  • array $filtro:
    Un array que contiene las condiciones y valores del filtro especial que se va a aplicar al campo. Este array debe incluir, al menos, la clave valor, que representa el valor que se va a utilizar en el filtro.

Retorna

  • array|string:
    Retorna una cadena que representa la parte de la sentencia SQL generada para el filtro especial. En caso de error, retorna un array de error generado por $this->error->error().

Explicación Detallada

  1. Limpieza del nombre del campo:

    • La función utiliza trim() para eliminar espacios en blanco al inicio y al final del nombre del campo.
  2. Validación del filtro especial:

    • La función llama a valida_data_filtro_especial() de la clase validaciones para validar la estructura y el contenido del filtro especial.
    • Si ocurre un error durante la validación, se genera un mensaje de error y se retorna un array con el mensaje de error.
  3. Validación de la existencia de claves:

    • La función verifica que el array de filtro contenga la clave valor utilizando valida_existencia_keys().
    • Si la clave valor no existe en el filtro, se genera un mensaje de error y se retorna un array con el mensaje de error.
  4. Ajuste del campo:

    • La función llama a campo_filtro_especial() para ajustar el nombre del campo en base al array de columnas_extra.
    • Si ocurre un error durante el ajuste, se genera un mensaje de error y se retorna un array con el mensaje de error.
  5. Generación de la cláusula SQL:

    • La función llama a data_sql() para generar la cláusula SQL utilizando el campo ajustado y el valor del filtro.
    • Si ocurre un error durante la generación de la cláusula SQL, se genera un mensaje de error y se retorna un array con el mensaje de error.
  6. Retorno de la cláusula SQL generada:

    • La función retorna la cadena que representa la parte de la sentencia SQL generada para el filtro especial.

Ejemplos

$campo = 'precio';
$columnas_extra = ['precio' => 'precio_ajustado'];
$filtro = [
    'precio' => ['valor' => 100, 'comparacion' => '>']
];

$resultado = $this->maqueta_filtro_especial($campo, $columnas_extra, $filtro);

// Resultado esperado:
// Una cadena SQL que representa el filtro especial aplicado al campo 'precio'.
// Un array de error si ocurre algún problema.

Código de la Función

private function maqueta_filtro_especial(string $campo, array $columnas_extra, array $filtro):array|string
    {
        $campo = trim($campo);

        $valida = (new validaciones())->valida_data_filtro_especial(campo: $campo,filtro:  $filtro);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al validar filtro', data: $valida);
        }

        $keys = array('valor');
        $valida = $this->validacion->valida_existencia_keys(keys: $keys, registro: $filtro[$campo]);
        if(errores::$error){
            return $this->error->error(mensaje:'Error al validar filtro',  data:$valida);
        }


        $campo_filtro = $campo;

        $campo = $this->campo_filtro_especial(campo: $campo,columnas_extra:  $columnas_extra);
        if(errores::$error){
            return $this->error->error(mensaje:'Error al obtener campo',  data:$campo);
        }

        $data_sql = $this->data_sql(campo: $campo,campo_filtro:  $campo_filtro,filtro:  $filtro);
        if(errores::$error){
            return $this->error->error(mensaje:'Error al genera sql',  data:$data_sql);
        }


        return $data_sql;
    }