En mi escenario actual, un tercero creará tablas dinámicamente en mi base de datos y almacenará el nombre de la tabla como varchar y los nombres de las columnas como jsonb en otra tabla que se define como una Entidad en mi backend de NestJS.
Esto es para que pueda realizar un seguimiento (y consultar) estas tablas, ya que no tengo control sobre su creación.
Para este propósito, me gustaría usar createQueryBuilder de createQueryBuilder en lugar de usar consultas sin procesar, ya que me resulta más fácil jugar con la abstracción.
Por lo que sé, TypeORMs createQueryBuilder necesita una Entidad definida en la cláusula from .
Algo como esto:
return await getManager() .createQueryBuilder() .select('*') .from(MyDefinedModel, 'modelAlias') .getRawMany(); }Así que me gustaría hacer algo como:
const tableName = await getDynamicallyGenetaredTableNames().getFirstOne() // now tableName points to a string that is a table name, ie 'table-data-192239' return await getManager() .createQueryBuilder() .select('*') .from(tableName, 'tableAlias') .getRawMany(); Entonces, al pasar el nombre de la tabla, señalo la tabla correcta, pero TypeORM (y TS) se quejan porque tableName es una cadena y no un tipo de entidad (clase).
Realmente no quiero encasillar y empezar a hacer cosas desagradables si hay algo más limpio para lograr esto. No encontré ninguna solución en los documentos oficiales.
¿Alguna idea brillante por ahí? gracias a todos
Podemos pasar el nombre de la tabla en lugar de Entidad para getRepository .
let tableName = 'user'; let query = getRepository(tableName).createQueryBuilder(tableName);