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

maqueta_filtro_especial

La función maqueta_filtro_especial es una función privada que construye una condición SQL personalizada basada en un campo específico, columnas extra y un filtro. La función realiza varias validaciones antes de generar la cadena SQL que representa el filtro.

Signatura

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

Parámetros

$campo (string): Nombre del campo de la base de datos que se desea filtrar. Este campo será procesado y validado para asegurar su corrección.

$columnas_extra (array): Array que contiene información adicional sobre las columnas que podrían ser necesarias para ajustar la condición SQL. Este array se utiliza en la generación del campo de filtro especial.

$filtro (array): Array asociativo que contiene los filtros que se aplicarán. Debe incluir al menos la clave 'valor' dentro del subarray asociado a $campo.

[
    'campo' => [
        'valor' => 'valor_a_filtrar', // Valor que se utilizará para construir la condición SQL
        ...
    ],
    ...
]

Retorna

  • array|string: Retorna una cadena SQL que representa la condición de filtro construida o un array con un mensaje de error en caso de que ocurra algún problema.

Explicación Detallada

  • Preparación y Validación Inicial del Campo:

    • La función comienza por limpiar el campo (trim) para eliminar espacios en blanco innecesarios. Luego, valida el filtro utilizando la función valida_data_filtro_especial de la clase validaciones. Si esta validación falla, se devuelve un error.
  • Validación de la Existencia de Claves en el Filtro:

    • La función valida que el filtro contenga la clave 'valor', que es esencial para construir la condición SQL. Si falta esta clave, se devuelve un error.
  • Generación del Campo de Filtro Especial:

    • Se genera un campo de filtro especial utilizando la función campo_filtro_especial de la clase where. Este paso adapta el campo original en función de las columnas adicionales proporcionadas. Si ocurre algún error, se devuelve un mensaje de error.
  • Generación de la Cadena SQL:

    • Se construye la cadena SQL utilizando la función data_sql de la clase where. Si hay algún error durante la generación de la SQL, se retorna un mensaje de error.
  • Retorno del SQL Generado:

    • Finalmente, se retorna la cadena SQL generada.

Ejemplos

$campo = 'nombre';
$columnas_extra = ['apellido'];
$filtro = [
    'nombre' => [
        'valor' => 'Juan',
    ]
];

$sql = $this->maqueta_filtro_especial($campo, $columnas_extra, $filtro);
// Resultado esperado: "nombre = 'Juan'"

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 = (new \gamboamartin\where\where())->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 = (new \gamboamartin\where\where())->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;
    }