addSelect 不会选择类型ORM中的字段



我只是想选择几列,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:中idroleName字段的样子

@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

最新更新