administrador.base.orm.columnas.columnas - gamboamartin/administrador GitHub Wiki
columnas
La función columnas
es una función privada que genera una cadena de columnas SQL basándose en una serie de parámetros y configuraciones. Dependiendo de si se aplica o no la opción columnas_by_table
, la función utiliza diferentes métodos para construir y organizar las columnas necesarias para una consulta SQL.
Signatura
private function columnas(bool $aplica_columnas_by_table, array $columnas_by_table, bool $columnas_en_bruto,
array $columnas_sql, array $extension_estructura, array $extra_join, modelo_base $modelo,
array $renombres, array $tablas_select): array|string
Parámetros
-
bool $aplica_columnas_by_table
:
Un valor booleano que indica si se debe aplicar la lógica decolumnas_by_table
. Si estrue
, la función construirá las columnas utilizando esta lógica; si esfalse
, utilizará un enfoque alternativo. -
array $columnas_by_table
:
Un array que contiene los nombres de las tablas que se van a utilizar en la consulta SQL. Este array solo se debe utilizar si$aplica_columnas_by_table
estrue
. -
bool $columnas_en_bruto
:
Un valor booleano que indica si las columnas deben ser procesadas en su forma original (true
) o si deben ser ajustadas y personalizadas (false
). -
array $columnas_sql
:
Un array que contiene columnas SQL adicionales o personalizadas que pueden ser integradas en la cadena resultante. -
array $extension_estructura
:
Un array que define la estructura de extensión para la consulta SQL. Las claves del array son los nombres de las tablas y los valores contienen los datos específicos relacionados con la tabla. -
array $extra_join
:
Un array que contiene información sobre columnas adicionales que se deben agregar a la consulta desde uniones (JOIN
) extras. -
modelo_base $modelo
:
Una instancia de la clasemodelo_base
que representa el modelo de datos sobre el que se está trabajando. Este objeto proporciona los metadatos y atributos necesarios para ajustar las columnas. -
array $renombres
:
Un array que contiene las tablas y los nombres alternativos (renombres) que deben ser aplicados. Las claves del array son los nombres de las tablas, y los valores son arrays que contienen la información relacionada con el renombrado de columnas. -
array $tablas_select
:
Un array que contiene las tablas de las cuales se desean seleccionar columnas. Las claves del array son los nombres de las tablas y los valores son los nombres de estas tablas.
Retorno
array|string
:
Retorna una cadena que representa las columnas SQL generadas y ajustadas para su uso en la consulta. En caso de error, retorna un array de error generado por$this->error->error()
.
Explicación Detallada
-
Verificación de
columnas_by_table
:- Si
$aplica_columnas_by_table
esfalse
, la función verifica que$columnas_by_table
esté vacío. Si no lo está, se genera un error con una sugerencia (fix
) indicando que no debería contener datos cuandoaplica_columnas_by_table
esfalse
. - Si
$aplica_columnas_by_table
estrue
, la función verifica que$columnas_by_table
contenga datos. Si está vacío, se genera un error con una sugerencia (fix
) indicando que debe contener nombres de tablas.
- Si
-
Generación de columnas:
- Si
$aplica_columnas_by_table
esfalse
, la función llama acolumnas_base()
para construir las columnas utilizando los parámetros proporcionados. - Si
$aplica_columnas_by_table
estrue
, la función llama acolumnas_by_table()
para construir las columnas basándose en las tablas especificadas en$columnas_by_table
.
- Si
-
Validación y ajuste final:
- La función limpia la cadena resultante de columnas utilizando
trim()
. - Si la cadena resultante está vacía, la función asigna una columna por defecto basada en la clave primaria del modelo (
$modelo->key_filtro_id as $modelo->key_id
).
- La función limpia la cadena resultante de columnas utilizando
-
Retorno de las columnas generadas:
- Si todas las etapas se completan con éxito, la función retorna la cadena de columnas SQL generadas y ajustadas.
Ejemplos
$aplica_columnas_by_table = false;
$columnas_by_table = [];
$columnas_en_bruto = false;
$columnas_sql = ['id', 'nombre', 'email'];
$extension_estructura = ['usuarios' => ['campo1', 'campo2']];
$extra_join = ['extra_campo' => 'valor_extra'];
$modelo = new modelo_base();
$renombres = ['usuarios' => ['renombre' => 'usuarios_activos']];
$tablas_select = ['usuarios' => 'usuarios', 'pedidos' => 'pedidos'];
$resultado = $this->columnas($aplica_columnas_by_table, $columnas_by_table, $columnas_en_bruto, $columnas_sql, $extension_estructura, $extra_join, $modelo, $renombres, $tablas_select);
// Resultado esperado:
// Una cadena con las columnas SQL generadas y ajustadas.
// Un array de error si ocurre algún problema.
Código de la Función
private function columnas(bool $aplica_columnas_by_table, array $columnas_by_table, bool $columnas_en_bruto,
array $columnas_sql, array $extension_estructura, array $extra_join, modelo_base $modelo,
array $renombres, array $tablas_select): array|string
{
if(!$aplica_columnas_by_table) {
if(count($columnas_by_table) > 0){
$fix = 'Si !$aplica_columnas_by_table $columnas_by_table debe ser vacio';
return $this->error->error(mensaje: 'Error columnas_by_table tiene datos en modelo '.$modelo->tabla,
data: $columnas_by_table, es_final: true, fix: $fix);
}
$columnas = $this->columnas_base(columnas_en_bruto: $columnas_en_bruto, columnas_sql: $columnas_sql,
extension_estructura: $extension_estructura, extra_join: $extra_join, modelo: $modelo,
renombres: $renombres, tablas_select: $tablas_select);
if (errores::$error) {
return $this->error->error(mensaje: 'Error al integrar columnas base en '.$modelo->tabla,
data: $columnas);
}
}
else{
if(count($columnas_by_table) === 0){
$fix = 'Si $aplica_columnas_by_table es true debe haber columnas_by_table con datos';
$fix .= ' columnas_by_table debe estar maquetado de la siguiente forma $columnas_by_table[] = ';
$fix.= "nombre_tabla";
return $this->error->error(mensaje: 'Error columnas_by_table esta vacia en '.$modelo->tabla,
data: $columnas_by_table, es_final: true, fix: $fix);
}
$columnas = $this->columnas_by_table(columnas_by_table: $columnas_by_table,
columnas_en_bruto: $columnas_en_bruto, modelo: $modelo);
if (errores::$error) {
return $this->error->error(mensaje: 'Error al integrar columnas by table en '.$modelo->tabla,
data: $columnas);
}
}
$columnas = trim($columnas);
if($columnas === ''){
$columnas = "$modelo->key_filtro_id as $modelo->key_id";
}
return $columnas;
}