src.where.data_sql - gamboamartin/where GitHub Wiki
data_sql
La función data_sql
es una función final pública que genera una condición SQL a partir de un campo, un campo de filtro y un array de filtros. La función sigue una serie de validaciones y construcción de SQL para asegurar que la consulta generada sea correcta y, si es necesario, trata el valor del filtro como un campo en lugar de un valor estático.
Signatura
final public function data_sql(string $campo, string $campo_filtro, array $filtro): array|string
Parámetros
$campo (string): Nombre del campo de la base de datos que se desea filtrar. $campo_filtro (string): Clave que se utilizará para acceder a los datos dentro del array $filtro. Este valor determina el operador y el valor (o campo) con el cual se construirá la condición SQL. $filtro (array): Array asociativo que contiene los filtros que se aplicarán. Este array debe tener la estructura:
[
'campo_filtro1' => [
'operador' => '=', // operador SQL
'valor' => 'valor1', // valor a filtrar o el nombre del campo si 'valor_es_campo' es true
'valor_es_campo' => true, // (opcional) indica si 'valor' debe tratarse como un campo en lugar de un valor estático
],
...
]
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
-
Validación de Datos:
-
- La función comienza validando los datos recibidos a través de la función valida_campo_filtro. Si esta función detecta algún error, la ejecución se detiene y se devuelve un array con el mensaje de error.
-
Construcción de la Cadena SQL Base:
-
- Si la validación es exitosa, la función procede a generar la base de la cadena SQL utilizando la función data_sql_base. Si ocurre algún error en esta etapa, se devuelve un mensaje de error.
-
Tratamiento Especial para valor_es_campo:
-
- Si en el array $filtro se especifica que el valor del filtro es un campo (valor_es_campo es true), la función llama a data_sql_campo para tratar el valor como un campo en lugar de un valor estático. Si ocurre algún error, se devuelve un mensaje de error.
-
Retorno del SQL Generado:
-
- Finalmente, la función retorna la cadena SQL generada.
Ejemplos
$campo = 'nombre';
$campo_filtro = 'nombre_filtro';
$filtro = [
'nombre_filtro' => [
'operador' => '=',
'valor' => 'otro_campo',
'valor_es_campo' => true,
]
];
$sql = $this->data_sql($campo, $campo_filtro, $filtro);
// Resultado esperado: "'nombre'=otro_campo"
Código de la Función
final public function data_sql(string $campo, string $campo_filtro, array $filtro): array|string
{
$valida = $this->valida_campo_filtro(campo: $campo,campo_filtro: $campo_filtro,filtro: $filtro);
if(errores::$error){
return $this->error->error(mensaje:'Error al validar datos', data:$valida);
}
$data_sql = $this->data_sql_base(campo: $campo,campo_filtro: $campo_filtro,filtro: $filtro);
if(errores::$error){
return $this->error->error(mensaje:'Error al genera sql', data:$data_sql);
}
if(isset($filtro[$campo_filtro]['valor_es_campo']) && $filtro[$campo_filtro]['valor_es_campo']){
$data_sql = $this->data_sql_campo(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;
}