【问题标题】:addSelect won't select fields in TypeORMaddSelect 不会选择 TypeORM 中的字段
【发布时间】:2021-04-23 14:15:39
【问题描述】:

我只是想选择几列,而 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。问题是为什么?

编辑:

这是idroleName 字段在UserEntity 中的样子:

    @PrimaryGeneratedColumn('increment')
    private id: number;

    @Column({
        type: 'enum',
        name: 'role_name',
        enum: EUserRoleName,
    })
    private roleName: EUserRoleName;

【问题讨论】:

  • 如果你使用.select([`${EDBTableNames.USERS}.id`, `${EDBTableNames.USERS}.role_name`])会怎样?另外我认为.role_name应该是UserEntity的属性名,而不是列名,但我不确定
  • @MicaelLevi 有趣,让我看看。
  • 不,没有成功。 Error: column users.roleName does not exist,至于传递数组,也没有用=(
  • @MicaelLevi 我不知道它有多重要,但role_name 是一个枚举。我不知道这是否重要,但以防万一。
  • 向我们展示你的版本和.select([]) one的查询结果

标签: node.js nestjs typeorm


【解决方案1】:

我没有确切的答案,但没有足够的声誉来发表评论。

您的代码看起来不错,并且该字段是枚举应该没有关系。您没有提到,如果您使用自定义命名策略或使用默认的 TypeORM 命名策略。该策略负责将模型中的字段重命名为数据库所需的命名格式(例如蛇案例、骆驼案例、自定义)。通常,您需要提供模型的列名,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

【讨论】:

    猜你喜欢
    • 2019-07-07
    • 2022-07-16
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    • 1970-01-01
    • 2021-01-23
    • 2020-05-04
    相关资源
    最近更新 更多