gpt4 book ai didi

nestjs - 从 TypeOrm 加载 'bit' Mysql 字段

转载 作者:行者123 更新时间:2023-12-04 16:02:41 27 4
gpt4 key购买 nike

我想将 Mysql 位数据列映射到 boolean带有 TypeOrm 的属性。我正在使用 NestJs 框架,但不知道该怎么做。据我所知,Mysql bit框架不支持数据类型,但我不知道任何解决方法。根据this discussion在实体中声明一个 bool 类型的字段应该就足够了,并且除了 @Column 之外别无其他装饰它。 :

  @Column()
enable: boolean;

但是,有了这个我得到 true实体的每个实例中的值。也试过 adding import 'reflect-metadata';无论是在实体中还是在 app.module.ts 中,结果相同。

另一种选择是使用 tinyint类型:
  @Column({
type: 'tinyint',
})
enable: boolean;

有了这个,我得到了这种数据,其中 data字段保存当前存储的 bool 值:
"enable":{"type":"Buffer","data":[1]}

我是否需要进行某种黑客攻击才能将其转换为正确的 bool 值,还是有其他更清晰的选择来做到这一点?

编辑 1

将 DB 列数据类型更改为 int似乎产生了正确的输出。然而,这不是最合适的解决方案,因为 bit type 是最适合这里的一种。

正在使用的版本:
  • "@nestjs/typeorm": "5.1.0"
  • "typeorm": "0.2.13"
  • “反射元数据”:“0.1.12”
  • Mysql 引擎:5.7.25


  • 编辑 2

    我试过更新 typeorm相关的软件包到他们的最新版本,同样的事情不断发生。还带有 Mysql 8.0 引擎。还尝试使用这些装饰器:
      @Column()
    @IsBoolean()
    enable: boolean;

    我在 Xubuntu 16.04,顺便说一句。

    最佳答案

    我用变压器解决了这个问题:

    import {ValueTransformer} from 'typeorm';
    class BoolBitTransformer implements ValueTransformer {
    // To db from typeorm
    to(value: boolean | null): Buffer | null {
    if (value === null) {
    return null;
    }
    const res = new Buffer(1);
    res[0] = value ? 1 : 0;
    return res;
    }
    // From db to typeorm
    from(value: Buffer): boolean | null {
    if (value === null) {
    return null;
    }
    return value[0] === 1;
    }
    }

    然后在位/ bool 列中使用这个转换器:
      @Column({
    type: 'bit',
    nullable: false,
    default: () => `"'b'1''"`,
    name: 'can_read',
    transformer: new BoolBitTransformer()
    })
    can_read!: boolean;

    关于nestjs - 从 TypeOrm 加载 'bit' Mysql 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55224483/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com