当前位置: 首页 > 知识库问答 >
问题:

Typeorm createQueryBuilder:可以将表名用作字符串而不是实体

阮健
2023-03-14

在我当前的场景中,第三方将在我的数据库上动态创建表,并将表名存储为varchar,列名存储为jsonb,存储在另一个表中,该表在我的NestJS后端定义为一个实体。

这样我就可以跟踪(和查询)这些表,因为我无法控制它的创建。

据我所知,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是字符串,而不是实体(类)类型

如果有更干净的东西来实现这一点,我真的不想打字并开始做肮脏的事情。我在官方文件里没找到任何解决办法

有什么好主意吗?谢谢大家

共有1个答案

白星渊
2023-03-14

我们可以为getRepository传递表名而不是实体。

let tableName = 'user';
let query = getRepository(tableName).createQueryBuilder(tableName);
 类似资料:
  • 我正在用熊猫库读取一些CSV数据。在我的数据中,某些列包含字符串。字符串是一个可能的值,空字符串也是。我设法让熊猫把“楠”读成一个字符串,但我不知道如何让它不把一个空值读成NaN。这是样本数据和输出 它正确地将“nan”读取为字符串“nan”,但仍然将空单元格读取为nan。我尝试在参数中传入以读取\u csv(使用),但它仍然将空单元格读取为nan。 我意识到我可以在读取后用fillna填充值,但

  • 问题内容: 是否可以代替python类替代python类? 可能并不明显,但是如果您使用StringIO处理二进制数据,那么您在使用Python 2.7或更高版本时就不走运了。 问题答案: 尝试。 正如其他人指出的那样,您的确可以在2.7中使用它,但是对于前向兼容性而言,它是一个不错的选择。

  • 问题内容: 是否可以使用String作为变量名。 问题答案: 您可以做的是将这些值关联(映射)到Music对象。这是示例:

  • 我正在学习如何使用Spring靴和胸腺嘧啶。我有一个问题,我在表单列表中提供一个特定对象的列表到一个Thymeleaf页面。当用户选择值并发布结果时,结果是所选对象的字符串,并且与我想要存储值的对象不兼容。 这可能听起来像一口,所以下面是代码。 输入:一个类将一组成分传递给表单,这个类在一个类成分列表中传递给表单(过滤对此无关紧要--插入一个列表作为model属性的值,键是一种成分类型) Thym

  • 我正在开发一个使用GraphQL查询OrientDB图数据库的web应用程序。它使用Apollo服务器来解决传入的GraphQL查询。 和关联的冲突解决程序: 但是,当我尝试实现上面的类型定义和解析器时,我收到了一个字符串列表,这些字符串都是“[object object]”,而不是实际的字符串: 我尝试向解析器添加一些代码,这些代码将遍历每个对象并创建要返回的正确字符串列表: 但这并不起作用,而