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;
}