【发布时间】:2021-10-10 08:11:46
【问题描述】:
在我当前的场景中,第三方将在我的数据库上动态创建表,并将表名存储为 varchar 并将列名存储为 jsonb 在其他表中,该表在我的 NestJS 后端中定义为实体.
这样我就可以跟踪(和查询)这些表,因为我无法控制它的创建。
为此,我想使用 TypeORM 的 createQueryBuilder 而不是使用原始查询,因为这样我更容易使用抽象。
据我所知,TypeORMs createQueryBuilder 需要在 from 子句中定义实体。
类似这样的:
return await getManager()
.createQueryBuilder()
.select('*')
.from(MyDefinedModel, 'modelAlias')
.getRawMany();
}
所以我想做这样的事情:
const tableName = await getDynamicallyGenetaredTableNames().getFirstOne()
// now tableName points to a string that is a table name, i.e 'table-data-192239'
return await getManager()
.createQueryBuilder()
.select('*')
.from(tableName, 'tableAlias')
.getRawMany();
所以传递表名我指向正确的表,但是 TypeORM(和 TS)抱怨因为 tableName 是一个字符串,而不是一个实体(类)类型
如果有更清洁的东西可以实现这一点,我真的不想打字并开始做讨厌的事情。 我在官方文档中没有找到任何解决方案
有什么绝妙的想法吗? 谢谢大家
【问题讨论】:
-
你找到解决办法了吗?
-
我现在只使用原始查询,通过 'repository.query('SQL QUERY HERE')'
标签: javascript sql node.js nestjs typeorm