乐闻世界logo
搜索文章和话题

How to dynamically get column names from TypeORM?

4 个月前提问
3 个月前修改
浏览次数47

1个答案

1

在 TypeORM 中,您可以使用多种方法从实体中动态获取列名。这里有几种常用的方法:

1. 利用getMetadata()方法

TypeORM 提供了Connection对象上的getMetadata()方法,可以用来获取实体的元数据,其中包括列名信息。以下是一个例子:

typescript
import { getConnection } from 'typeorm'; import { YourEntity } from './entity/YourEntity'; const metadata = getConnection().getMetadata(YourEntity); const columns = metadata.columns; const columnNames = columns.map(column => column.propertyName);

在这个例子中,YourEntity是您想要获取列名的实体类。getMetadata()方法返回实体的元数据,其中columns数组包含了所有列的详细信息,您可以从中映射出所需的列名。

2. 使用EntityMetadataColumnMetadata

如果您已经有了对应实体的EntityMetadata对象,可以直接访问columns属性,该属性是包含ColumnMetadata对象的数组。每个ColumnMetadata对象含有关于列的信息,如数据库中的列名、属性名等。下面是如何获取列名的例子:

typescript
import { getConnection } from 'typeorm'; const entityMetadata = getConnection().getMetadata(YourEntity); const columnNames = entityMetadata.columns.map(column => column.propertyName);

3. 使用QueryBuilder

如果您想要在执行查询的同时获取列名,可以使用TypeORM的QueryBuilder。这种方法可以在您动态构建查询时获取列名,例如:

typescript
import { getConnection } from 'typeorm'; import { YourEntity } from './entity/YourEntity'; const queryBuilder = getConnection() .getRepository(YourEntity) .createQueryBuilder("entity"); const columnNames = queryBuilder.expressionMap.mainAlias.metadata.columns.map(column => column.propertyName);

在这个例子中,expressionMapQueryBuilder内部的对象,它保存了当前查询相关的元数据信息。mainAlias是当前查询主体的别名,它的metadata属性包含了实体的元数据。

确保在使用以上任何方法时,您的代码在数据库连接建立之后执行。获取列名的代码通常放在某个异步函数中,确保它在数据库连接完成后被调用。例如,您可能会把这段代码放在API请求的处理函数中,或者在应用启动并建立数据库连接之后运行的初始化函数中。

2024年6月29日 12:07 回复

你的答案