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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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;
    }