administrador.base.orm.columnas.data_for_columnas_envio - gamboamartin/administrador GitHub Wiki
data_for_columnas_envio
La función data_for_columnas_envio
prepara los datos necesarios para la generación de una consulta SQL sobre columnas, incluyendo validaciones para el nombre de la tabla. La función devuelve un objeto stdClass
que contiene las cadenas SQL generadas o un array en caso de error.
Signatura
private function data_for_columnas_envio(array $columnas, bool $columnas_en_bruto, modelo_base $modelo, string $tabla_original, string $tabla_renombrada): array|stdClass
Parámetros
$columnas
(array): Arreglo de alias de columnas que deben ser incluidas en la consulta SQL.
-
- Descripción: Si el arreglo no está vacío, solo se procesarán las columnas cuyos alias están en este arreglo.
$columnas_en_bruto
(bool): Indicador de si las columnas deben ser usadas en bruto o con alias.
-
- Descripción: Si es true, las columnas se usarán sin alias; de lo contrario, se les asignará un alias.
$modelo
(modelo_base): Instancia del modelo base que se usará para obtener la información de la tabla y columnas.
-
- Descripción: Este objeto proporciona métodos para obtener las columnas y el nombre de la tabla.
$tabla_original
(string): Nombre original de la tabla, que puede estar en el formato de namespace.
-
- Descripción: Este nombre se utilizará para obtener las columnas y el nombre de la tabla.
$tabla_renombrada
(string): Nombre alternativo de la tabla (si es necesario renombrarla).
-
- Descripción: Se usará para generar el nombre de la tabla en la consulta SQL.
Retorna
-
(stdClass): Un objeto que contiene dos propiedades:
-
- columnas_sql(string): Cadena SQL generada con las columnas.
-
- columnas_extra_sql (string): Cadena SQL adicional para columnas extra (en este caso, siempre está vacía).
-
(array): Si ocurre un error (por ejemplo, si $tabla_original está vacío o si hay un problema al generar las columnas SQL), se retorna un array con un mensaje de error.
-
- Descripción: Este array describe el error ocurrido durante el proceso.
Explicación Detallada
-
Validación del Nombre de la Tabla:
-
- La función reemplaza el prefijo models\ en $tabla_original y valida que no esté vacío. Si lo está, se retorna un array con un mensaje de error.
-
- También se verifica que $tabla_original no sea un número. Si lo es, se retorna un array con un mensaje de error.
-
Generación de la Cadena SQL para Columnas:
-
- Se llama a la función genera_columnas_tabla para construir la cadena SQL con las columnas y alias. Si ocurre un error, se retorna un array con un mensaje de error.
-
Construcción del Objeto de Datos:
-
- Se crea un objeto stdClass con dos propiedades:
-
-
- columnas_sql: Contiene la cadena SQL generada para las columnas.
-
-
-
- columnas_extra_sql: Inicialmente vacío, en este contexto no se usa para columnas adicionales.
-
-
Retorno de los Datos:
-
- Si todas las operaciones se realizan sin errores, se retorna el objeto stdClass con las propiedades columnas_sql y columnas_extra_sql.
-
Posibles Errores
-
- Nombre de Tabla Vacío: Si $tabla_original está vacío después de eliminar el prefijo models\, la función retorna un array con un mensaje de error.
-
- Nombre de Tabla como Número: Si $tabla_original es un número, se retorna un array con un mensaje de error.
-
- Error al Generar Columnas SQL: Si hay un problema al generar la cadena SQL, se retorna un array con un mensaje de error.
Ejemplos
$columnas = ['mi_tabla_nombre_columna1', 'mi_tabla_nombre_columna2'];
$columnas_en_bruto = false;
$modelo = new ModeloBase();
$tabla_original = 'models\\MiModelo';
$tabla_renombrada = 'mi_modelo';
$resultado = $this->data_for_columnas_envio($columnas, $columnas_en_bruto, $modelo, $tabla_original, $tabla_renombrada);
if (is_object($resultado) && isset($resultado->columnas_sql)) {
echo "Consulta SQL: " . $resultado->columnas_sql;
echo "Columnas Extra SQL: " . $resultado->columnas_extra_sql;
} else {
echo "Error: " . $resultado['mensaje'];
}
Código de la Función
private function genera_columnas_tabla(bool $columnas_en_bruto,modelo_base $modelo, string $tabla_original,
string $tabla_renombrada, array $columnas = array()):array|string
{
$tabla_original = str_replace('models\\','',$tabla_original);
if($tabla_original === ''){
return $this->error->error(mensaje: 'Error tabla original no puede venir vacia', data: $tabla_original,
es_final: true);
}
if(is_numeric($tabla_original)){
return $this->error->error(mensaje: 'Error $tabla_original no puede ser un numero',data: $tabla_original,
es_final: true);
}
$data = $this->obten_columnas( modelo: $modelo, tabla_original: $tabla_original);
if(errores::$error){
return $this->error->error(mensaje: 'Error al obtener columnas',data: $data);
}
$columnas_parseadas = $data->columnas_parseadas;
$tabla_nombre = $modelo->obten_nombre_tabla(tabla_original: $tabla_original,
tabla_renombrada: $tabla_renombrada);
if(errores::$error){
return $this->error->error(mensaje: 'Error al obtener nombre de tabla', data: $tabla_nombre);
}
$columnas_sql = $this->columnas_sql_init(columnas: $columnas, columnas_en_bruto:$columnas_en_bruto,
columnas_parseadas: $columnas_parseadas, tabla_nombre: $tabla_nombre);
if(errores::$error){
return $this->error->error(mensaje: 'Error al obtener columnas sql',data: $columnas_sql);
}
return $columnas_sql;
}