administrador.base.orm.where.obten_filtro_especial - gamboamartin/administrador GitHub Wiki

obten_filtro_especial

La función obten_filtro_especial es una función privada que genera una cláusula SQL basada en un filtro especial aplicado a un campo específico. La función valida el filtro, genera la parte SQL correspondiente utilizando las columnas adicionales si es necesario, y construye la cláusula SQL final utilizando una clase externa para completar la operación.

Signatura

private function obten_filtro_especial(array $columnas_extra, array $filtro_esp, string $filtro_especial_sql):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_esp:
    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.

  • 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 la parte SQL generada por maqueta_filtro_especial().

Retorna

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

Explicación Detallada

  1. Obtención del campo del filtro:

    • La función obtiene la clave del primer elemento en el array filtro_esp y la asigna a la variable $campo.
    • La función limpia el nombre del campo utilizando trim() para eliminar espacios en blanco al inicio y al final.
  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. Generación de la parte SQL del filtro:

    • La función llama a maqueta_filtro_especial() para generar la parte SQL del filtro utilizando el campo y las columnas adicionales.
    • 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.
  4. Construcción de la cláusula SQL utilizando una clase externa:

    • La función llama a genera_filtro_especial() de la clase \gamboamartin\where\where() para construir la cláusula SQL final combinando la parte SQL generada y cualquier filtro SQL existente en $filtro_especial_sql.
    • Si ocurre un error durante la construcción de la cláusula SQL, se genera un mensaje de error y se retorna un array con el mensaje de error.
  5. Retorno de la cláusula SQL generada:

    • La función retorna la cadena $filtro_especial_sql_r que representa la cláusula SQL generada para el filtro especial.

Ejemplos

$columnas_extra = ['precio' => 'precio_ajustado'];
$filtro_esp = [
    'precio' => ['valor' => 100, 'comparacion' => '>']
];
$filtro_especial_sql = '';

$resultado = $this->obten_filtro_especial($columnas_extra, $filtro_esp, $filtro_especial_sql);

// 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 obten_filtro_especial(
        array $columnas_extra, array $filtro_esp, string $filtro_especial_sql):array|string
    {
        $campo = key($filtro_esp);
        $campo = trim($campo);

        $valida =(new validaciones())->valida_data_filtro_especial(campo: $campo,filtro:  $filtro_esp);
        if(errores::$error){
            return $this->error->error(mensaje: "Error en filtro ", data: $valida);
        }
        $data_sql = $this->maqueta_filtro_especial(campo: $campo, columnas_extra: $columnas_extra,filtro: $filtro_esp);
        if(errores::$error){
            return $this->error->error(mensaje:"Error filtro", data:$data_sql);
        }
        $filtro_especial_sql_r = (new \gamboamartin\where\where())->genera_filtro_especial(campo:  $campo,
            data_sql: $data_sql, filtro_esp: $filtro_esp, filtro_especial_sql: $filtro_especial_sql);
        if(errores::$error){
            return $this->error->error(mensaje:"Error filtro",data: $filtro_especial_sql_r);
        }

        return $filtro_especial_sql_r;
    }