administrador.base.orm.columnas.columnas_extra - gamboamartin/administrador GitHub Wiki
columnas_extra
La función columnas_extra ajusta y agrega columnas adicionales a una consulta SQL basada en la información proporcionada en el array $extra_join. Este proceso incluye la validación de los datos en $extra_join, el renombramiento de tablas y la integración de las columnas adicionales en la cadena $columnas. Si alguna validación falla, la función retorna un array con el error correspondiente. Si todo es correcto, retorna la cadena de columnas ajustadas.
Signatura
private function columnas_extra(string $columnas, array $columnas_sql, array $extra_join, modelo_base $modelo): array|string
Parámetros
-
string $columnas
:
Cadena que contiene las columnas iniciales que se deben ajustar. -
array $columnas_sql
:
Array que contiene las columnas SQL originales de la consulta. -
array $extra_join
:
Array asociativo donde las claves son los nombres de las tablas a unir, y los valores son arrays con la información adicional requerida para la unión. -
modelo_base $modelo
:
Instancia del modelo base que contiene la lógica de la consulta.
Retorna
string|array
:
Devuelve una cadena con las columnas ajustadas o un array de error si alguna validación falla.
Explicación Detallada
-
Inicialización de Variables:
columnas_env
: Se inicia con el valor de la cadena$columnas
proporcionada como parámetro. Esta variable se utilizará para acumular y ajustar las columnas que se deben incluir en la consulta final.
-
Iteración sobre $extra_join:
- La función itera sobre cada elemento del array $extra_join. Este array es un conjunto de tablas y sus datos asociados que se desean unir a la consulta SQL.
-
Limpieza del Nombre de la Tabla:
- Se elimina el prefijo models\ del nombre de la tabla, si está presente. Esto es para normalizar el nombre de la tabla y asegurarse de que no incluya la ruta del modelo.
-
Validación del Nombre de la Tabla:
- Se verifica que el nombre de la tabla no sea numérico. Si lo es, se considera un error y la función devuelve un array de error.
-
Validación de los Datos Asociados a la Tabla:
- Se comprueba que los datos asociados a la tabla (es decir, $data) sean un array. Si no lo son, se considera un error y se devuelve un array de error.
-
Renombramiento de la Tabla:
- La función tabla_renombrada_extra se utiliza para renombrar la tabla si es necesario, basándose en los datos proporcionados en $data.
-
Ajuste de las Columnas:
- Se llama a la función ajusta_columnas_completas para integrar las columnas de la tabla renombrada en la cadena de columnas finales. Esta función realiza la tarea de ajustar las columnas basadas en la tabla y el modelo.
-
Retorno del Resultado:
- Después de procesar todas las tablas y ajustar las columnas, la función devuelve la cadena final de columnas ajustadas ($columnas_env). Si alguna validación falla durante el proceso, se devuelve un array de error en lugar de la cadena.
Ejemplos
$columnas = "usuarios.id, usuarios.nombre";
$columnas_sql = ["usuarios.id", "usuarios.nombre"];
$extra_join = [
'perfiles' => ['id', 'nombre']
];
$modelo = new modelo_base(); // Instancia del modelo base
$resultado = $this->columnas_extra($columnas, $columnas_sql, $extra_join, $modelo);
if (is_array($resultado)) {
// Manejo de error
print_r($resultado);
} else {
// Resultado exitoso: columnas ajustadas
echo $resultado;
}
Código de la Función
private function columnas_extra(string $columnas, array $columnas_sql, array $extra_join,
modelo_base $modelo): array|string
{
$columnas_env = $columnas;
foreach($extra_join as $tabla=>$data){
$tabla = str_replace('models\\','',$tabla);
if(is_numeric($tabla)){
return $this->error->error(mensaje: 'Error ingrese un array valido '.$tabla,
data: $extra_join, es_final: true);
}
if(!is_array($data)){
return $this->error->error(mensaje: 'Error data debe ser un array ',
data: $data, es_final: true);
}
$tabla_renombrada = $this->tabla_renombrada_extra(data: $data,tabla: $tabla);
if(errores::$error){
return $this->error->error(mensaje:'Error al integrar tabla_renombrada', data:$tabla_renombrada);
}
$columnas_env = $this->ajusta_columnas_completas(columnas: $columnas_env, columnas_en_bruto: false,
columnas_sql: $columnas_sql, modelo: $modelo, tabla: $tabla, tabla_renombrada: $tabla_renombrada);
if(errores::$error){
return $this->error->error(mensaje:'Error al integrar columnas', data:$columnas_env);
}
}
return $columnas_env;
}