src.where.genera_sentencia_base - gamboamartin/where GitHub Wiki

genera_sentencia_base

La función genera_sentencia_base construye una sentencia SQL dinámica basada en los filtros proporcionados y el tipo de filtro especificado (numeros o textos). Esta función se asegura de validar el tipo de filtro y luego llama a las funciones correspondientes para generar la sentencia SQL.

Signatura

final public function genera_sentencia_base(array $columnas_extra, array $filtro, string $tipo_filtro): array|string

Parámetros

$columnas_extra (array): Un array que contiene columnas adicionales que pueden ser utilizadas en la comparación.

$filtro (array): Un array asociativo donde las claves son los nombres de las columnas y los valores son los datos de filtro y operadores.

$tipo_filtro (string): Un string que indica el tipo de filtro a utilizar (numeros o textos).

Retorna

  • string: Devuelve un string que representa la sentencia SQL construida a partir de los filtros y el tipo de filtro.
  • array: En caso de error, devuelve un array con detalles del error.

Explicación Detallada

  • Validación del Tipo de Filtro:

    • Se llama a la función verifica_tipo_filtro para validar el tipo de filtro.
  • Inicialización:

    • Se inicializa la variable $sentencia como una cadena vacía.
  • Generación de la Sentencia SQL:

    • Si el tipo_filtro es numeros, se llama a la función genera_and para generar la sentencia SQL para números.
    • Si ocurre un error en genera_and, se devuelve un array indicando que hubo un problema al generar la sentencia para números.
    • Si el tipo_filtro es textos, se llama a la función genera_and_textos para generar la sentencia SQL para textos.
    • Si ocurre un error en genera_and_textos, se devuelve un array indicando que hubo un problema al generar la sentencia para textos.
  • Retorno de la Sentencia:

    • Se retorna la sentencia SQL construida.

Ejemplos

$columnas_extra = ['tabla1.campo1', 'tabla2.campo2'];
$filtro = [
    'tabla1.campo1' => ['value' => 'valor1', 'operador' => 'AND'],
    'tabla2.campo2' => ['value' => 'valor2', 'operador' => 'OR']
];
$tipo_filtro = 'textos';

$sentencia = genera_sentencia_base($columnas_extra, $filtro, $tipo_filtro);
// Retorno esperado: "tabla1.campo1 LIKE '%valor1%' AND tabla2.campo2 LIKE '%valor2%'"

Código de la Función

final public function genera_sentencia_base(array $columnas_extra,  array $filtro, string $tipo_filtro):array|string{
        $verifica_tf = $this->verifica_tipo_filtro(tipo_filtro: $tipo_filtro);
        if(errores::$error){
            return $this->error->error(mensaje: 'Error al validar tipo_filtro',data: $verifica_tf);
        }
        $sentencia = '';
        if($tipo_filtro === 'numeros') {
            $sentencia = $this->genera_and(columnas_extra: $columnas_extra, filtro: $filtro);
            if(errores::$error){
                return $this->error->error(mensaje: "Error en and",data:$sentencia);
            }
        }
        elseif ($tipo_filtro==='textos'){
            $sentencia = $this->genera_and_textos(columnas_extra: $columnas_extra,filtro: $filtro);
            if(errores::$error){
                return $this->error->error(mensaje: "Error en texto",data:$sentencia);
            }
        }
        return $sentencia;
    }