Nestjs 从TypeOrm加载“bit”Mysql字段

Nestjs 从TypeOrm加载“bit”Mysql字段,nestjs,typeorm,Nestjs,Typeorm,我想用TypeOrm将Mysql位数据列映射到布尔属性。我正在使用NestJs框架,但不知道如何实现它。据我所知,框架不支持Mysql位数据类型,但我不知道如何解决它。根据定义,在实体中声明一个布尔类型的字段就足够了,不要用@Column来修饰它: 然而,通过这个,我在实体的每个实例中都得到了真正的值。还尝试导入“反射元数据”;在实体和app.module.ts中,结果相同 另一种选择是使用tinyint类型: 这样,我就得到了这种数据,其中数据字段保存了当前存储的布尔值: "enable":{

我想用TypeOrm将Mysql位数据列映射到布尔属性。我正在使用NestJs框架,但不知道如何实现它。据我所知,框架不支持Mysql位数据类型,但我不知道如何解决它。根据定义,在实体中声明一个布尔类型的字段就足够了,不要用@Column来修饰它:

然而,通过这个,我在实体的每个实例中都得到了真正的值。还尝试导入“反射元数据”;在实体和app.module.ts中,结果相同

另一种选择是使用tinyint类型:

这样,我就得到了这种数据,其中数据字段保存了当前存储的布尔值:

"enable":{"type":"Buffer","data":[1]}
我是否需要进行某种破解以将其转换为正确的布尔值,或者是否有其他更干净的选择来实现这一点

编辑1

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

正在使用的版本:

@nestjs/typeorm:5.1.0 字体:0.2.13 反映元数据:0.1.12 Mysql引擎:5.7.25 编辑2

我已经尝试过将typeorm相关的包更新到它们的最新版本,同样的情况也在不断发生。同样使用Mysql 8.0引擎。这些装饰师也尝试过:

  @Column()
  @IsBoolean()
  enable: boolean;

我在Xubuntu 16.04,顺便说一句。

我用transformer解决了这个问题:

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;
  }
}
然后在位/布尔列中使用此转换器:

  @Column({
    type: 'bit',
    nullable: false,
    default: () => `"'b'1''"`,
    name: 'can_read',
    transformer: new BoolBitTransformer()
  })
  can_read!: boolean;

我用transformer解决了这个问题:

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;
  }
}
然后在位/布尔列中使用此转换器:

  @Column({
    type: 'bit',
    nullable: false,
    default: () => `"'b'1''"`,
    name: 'can_read',
    transformer: new BoolBitTransformer()
  })
  can_read!: boolean;

在我看来,bit在本PR中受支持:@JesseCarter尝试将typeorm和@nestjs/typeorm更新为其最新版本。。不走运。也尝试了Mysql引擎8.0,没有运气。在我看来,从这个PR开始,bit就得到了支持:@JesseCarter尝试将typeorm和@nestjs/typeorm更新到最新版本。。不走运。也尝试了Mysql引擎8.0,没有运气。一切都是如此。