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

genera_filtros_iniciales

La función genera_filtros_iniciales se encarga de crear y ajustar un conjunto de filtros iniciales para una consulta SQL. A partir de los parámetros SQL proporcionados, esta función asigna, limpia y ajusta los filtros, envolviendo en paréntesis los valores que lo requieren. Si se produce algún error en el proceso, devuelve un array con los detalles del error.

Signatura

private function genera_filtros_iniciales(string $diferente_de_sql, string $filtro_especial_sql,
                                              string $filtro_extra_sql, string $filtro_rango_sql, string $in_sql,
                                              array $keys_data_filter, string $not_in_sql, string $sentencia,
                                              string $sql_extra, string $filtro_fecha_sql = ''): array|stdClass

Parámetros

string $diferente_de_sql

  • Tipo: string
  • Descripción: Un filtro SQL que excluye ciertos valores (!=) en la consulta.

string $filtro_especial_sql

  • Tipo: string
  • Descripción: Un filtro SQL que aplica una condición especial a la consulta.

string $filtro_extra_sql

  • Tipo: string
  • Descripción: Un filtro adicional que se aplica en la consulta.

string $filtro_rango_sql

  • Tipo: string
  • Descripción: Un filtro basado en un rango de valores para limitar la consulta.

string $in_sql

  • Tipo: string
  • Descripción: Un filtro IN que especifica un conjunto de valores dentro de una cláusula SQL.

array $keys_data_filter

  • Tipo: array
  • Descripción: Un array de claves que se utilizarán para identificar y limpiar los filtros en la consulta.

string $not_in_sql

  • Tipo: string
  • Descripción: Un filtro NOT IN que excluye un conjunto de valores de la consulta SQL.

string $sentencia

  • Tipo: string
  • Descripción: Una sentencia SQL adicional que se puede incluir en la consulta.

string $sql_extra

  • Tipo: string
  • Descripción: Cláusulas SQL adicionales que se aplican a la consulta.

string $filtro_fecha_sql (opcional)

  • Tipo: string
  • Descripción: Un filtro basado en fechas que puede aplicarse en la consulta.
  • Valor predeterminado: '' (cadena vacía).

Retorno

array|stdClass

  • Tipo: array o `stdClass**
  • Descripción:
    • Si la operación es exitosa, devuelve un objeto stdClass que contiene los filtros generados y ajustados.
    • Si ocurre un error durante la asignación, limpieza o ajuste de los filtros, devuelve un array con un mensaje de error y los detalles correspondientes.

Explicación Detallada

  1. Asignación de filtros:

    • La función comienza llamando a asigna_data_filtro de la clase \gamboamartin\where\where para crear los filtros SQL con los parámetros proporcionados.
    • Si ocurre un error en la asignación de los filtros, se captura y se devuelve un array de error.
    $filtros = (new \gamboamartin\where\where())->asigna_data_filtro(
        diferente_de_sql: $diferente_de_sql,
        filtro_especial_sql:  $filtro_especial_sql,
        filtro_extra_sql: $filtro_extra_sql,
        filtro_fecha_sql:  $filtro_fecha_sql,
        filtro_rango_sql:  $filtro_rango_sql,
        in_sql: $in_sql,
        not_in_sql: $not_in_sql,
        sentencia: $sentencia,
        sql_extra:  $sql_extra
    );
    if (errores::$error) {
        return $this->error->error(mensaje: 'Error al asignar filtros', data: $filtros);
    }
    
  2. Limpieza de los filtros:

    • La función llama a limpia_filtros para eliminar espacios en blanco y asegurar que los filtros estén bien formados. Si se produce un error durante esta limpieza, la función devuelve un array de error.
    $filtros = $this->limpia_filtros(filtros: $filtros, keys_data_filter: $keys_data_filter);
    if (errores::$error) {
        return $this->error->error(mensaje: 'Error al limpiar filtros', data: $filtros);
    }
    
  3. Aplicación de paréntesis:

    • Posteriormente, se ajustan los filtros envolviendo los valores en paréntesis mediante la función parentesis_filtro. Si ocurre algún error en este paso, se devuelve un array de error.
    $filtros = $this->parentesis_filtro(filtros: $filtros, keys_data_filter: $keys_data_filter);
    if (errores::$error) {
        return $this->error->error(mensaje: 'Error al generar filtros', data: $filtros);
    }
    
  4. Retorno de los filtros generados:

    • Si no se producen errores, la función devuelve el objeto $filtros con los filtros generados y ajustados.
    return $filtros;
    

Ejemplos

$diferente_de_sql = "id != 10";
$filtro_especial_sql = "estatus = 'activo'";
$filtro_extra_sql = "";
$filtro_rango_sql = "fecha BETWEEN '2023-01-01' AND '2023-12-31'";
$in_sql = "id IN (1, 2, 3)";
$not_in_sql = "";
$sentencia = "";
$sql_extra = "";
$filtro_fecha_sql = "";
$keys_data_filter = ['filtro_especial', 'filtro_extra', 'filtro_rango', 'in', 'not_in'];

$resultado = $this->genera_filtros_iniciales($diferente_de_sql, $filtro_especial_sql, $filtro_extra_sql,
    $filtro_rango_sql, $in_sql, $keys_data_filter, $not_in_sql, $sentencia, $sql_extra, $filtro_fecha_sql);

Código de la Función

private function genera_filtros_iniciales(string $diferente_de_sql, string $filtro_especial_sql,
                                              string $filtro_extra_sql, string $filtro_rango_sql, string $in_sql,
                                              array $keys_data_filter, string $not_in_sql, string $sentencia,
                                              string $sql_extra, string $filtro_fecha_sql = ''): array|stdClass
    {
        $filtros = (new \gamboamartin\where\where())->asigna_data_filtro(diferente_de_sql: $diferente_de_sql,
            filtro_especial_sql:  $filtro_especial_sql, filtro_extra_sql: $filtro_extra_sql,
            filtro_fecha_sql:  $filtro_fecha_sql, filtro_rango_sql:  $filtro_rango_sql, in_sql: $in_sql,
            not_in_sql: $not_in_sql,sentencia: $sentencia, sql_extra:  $sql_extra);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al asignar filtros',data: $filtros);
        }

        $filtros = $this->limpia_filtros(filtros: $filtros, keys_data_filter: $keys_data_filter);
        if(errores::$error){
            return $this->error->error(mensaje:'Error al limpiar filtros',data:$filtros);
        }

        $filtros = $this->parentesis_filtro(filtros: $filtros,keys_data_filter: $keys_data_filter);
        if(errores::$error){
            return $this->error->error(mensaje:'Error al generar filtros',data:$filtros);
        }
        return $filtros;
    }