我只是想选择几列,typeorm不允许我这样做。我有一个名为users
的表,它由UserEntity
类表示。
我提出以下请求:
await entityManager.getRepository(UserEntity)
.createQueryBuilder(EDBTableNames.USERS)
.select(`${EDBTableNames.USERS}.id`)
.addSelect(`${EDBTableNames.USERS}.role_name`)
.where(`${EDBTableNames.USERS}.role_name IN ('FIGHTER');`)
.getMany();
我得到的对象只包含用户id,它没有相应的role_name
。问题是为什么?
编辑:
以下是UserEntity
:中id
和roleName
字段的样子
@PrimaryGeneratedColumn('increment')
private id: number;
@Column({
type: 'enum',
name: 'role_name',
enum: EUserRoleName,
})
private roleName: EUserRoleName;
我没有确切的答案,但没有足够的声誉发表评论。
您的代码看起来很好,字段是枚举应该无关紧要。您没有提到,如果您使用自定义命名策略或使用默认的TypeORM命名策略。该策略负责将模型中的字段重命名为数据库所需的命名格式(例如snake大小写、camel大小写、自定义(。通常,您需要提供模型的列名,TypeORM会在内部对其进行重命名以创建查询。除了原始查询之外,在原始查询中,您需要使用数据库中使用的名称。
不确定您是否知道可以将生成的查询记录到控制台中。通过这种方式,您可以检查TypeORM从代码中生成的查询。
这就是您可以全局启用查询日志记录的方式:
export = <PostgresConnectionOptions>{
type: 'postgres',
url: process.env.DB_URL,
schema: process.env.DB_SCHEMA,
...
logger: 'debug', // log queries to console
};
到目前为止,我只使用此设置。但在这个配置中,您有以下两个选项来自定义日志:
/**
* export declare type LoggerOptions = boolean | "all" | ("query" | "schema" | "error" | "warn" | "info" | "log" | "migration")[];
*/
readonly logging?: LoggerOptions;
/**
* Logger instance used to log queries and events in the ORM.
*/
readonly logger?: "advanced-console" | "simple-console" | "file" | "debug" | Logger;
除此之外,您还可以为特定查询启用查询日志记录:https://stackoverflow.com/a/64413684/11964644