javascript - TypeORM createQueryBuilder:可以使用表名作为字符串而不是实体
问题描述
在我当前的场景中,第三方将在我的数据库上动态创建表,并将表名存储为 avarchar
和列名,就像jsonb
在我的 NestJS 后端中定义为实体的其他表中一样。
这样我就可以跟踪(和查询)这些表,因为我无法控制它的创建。
为此,我想使用TypeORM而createQueryBuilder
不是使用原始查询,因为它更容易让我玩抽象。
据我所知,TypeORMscreateQueryBuilder
需要在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
是一个字符串,而不是一个实体(类)类型
如果有更清洁的东西可以实现这一点,我真的不想打字并开始做讨厌的事情。我在官方文档中没有找到任何解决方案
有什么绝妙的想法吗?谢谢大家
解决方案
我们可以传递表名而不是实体getRepository
。
let tableName = 'user';
let query = getRepository(tableName).createQueryBuilder(tableName);
推荐阅读
- android - Xamarin Forms 上传图片 Laravel POST 请求失败
- javascript - 将开玩笑的数据传递给已安装的组件
- mysql - 我正在尝试连接 python 和 mysql,但遇到以下错误:
- python - 规范化或缩放熊猫多索引上的列
- mapstruct - MapStruct 在没有任何反向配置的情况下生成错误的映射代码?
- c# - WCF 错误:“客户端和服务器之间的安全绑定不匹配”
- python - 在 sympy 中将有理数写为函数
- python - 如何知道所有指向模型的 django 反向查找
- ios - UNITY 2019.3.3 WebGL(wasm)在IOS上的可执行内存不足
- excel - 我正在尝试制作可切换选项卡,但在编译 vba 期间出现错误