首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从TypeOrm加载“位”Mysql字段

从TypeOrm加载“位”Mysql字段
EN

Stack Overflow用户
提问于 2019-03-18 15:12:01
回答 2查看 3.2K关注 0票数 2

我想用boolean将Mysql位数据列映射到TypeOrm属性。我使用的是NestJ框架,但我想不出怎么做。据我所见,框架不支持Mysql bit数据类型,但我不知道如何解决这个问题。根据这一讨论,在实体中声明一个布尔型字段就足够了,不要只用@Column来修饰它

代码语言:javascript
复制
  @Column()
  enable: boolean;

但是,使用这种方法,我可以在实体的每个实例中获得true值。还在实体和添加中尝试了import 'reflect-metadata';,结果是相同的。

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

代码语言:javascript
复制
  @Column({
    type: 'tinyint',
  })
  enable: boolean;

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

代码语言:javascript
复制
"enable":{"type":"Buffer","data":[1]}

我是否需要进行某种黑客操作才能将其转换为一个适当的布尔值,或者是否有其他更清晰的选择来进行此操作?

编辑1

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

正在使用的版本:

  • @nestjs/typeorm:"5.1.0“
  • "typeorm":"0.2.13“
  • “反映-元数据”:"0.1.12“
  • Mysql引擎: 5.7.25

编辑2

我尝试过将typeorm相关的包更新到它们的最新版本,同样的情况也一直在发生。也有MySQL8.0引擎。也尝试过与这些装饰者:

代码语言:javascript
复制
  @Column()
  @IsBoolean()
  enable: boolean;

我在Xubuntu 16.04,BTW

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-22 15:07:47

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

代码语言:javascript
复制
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;
  }
}

然后在位/布尔列中使用此转换器:

代码语言:javascript
复制
  @Column({
    type: 'bit',
    nullable: false,
    default: () => `"'b'1''"`,
    name: 'can_read',
    transformer: new BoolBitTransformer()
  })
  can_read!: boolean;
票数 5
EN

Stack Overflow用户

发布于 2021-07-30 13:54:14

我用以下方法解决这个问题

代码语言:javascript
复制
  @Column({
    name: 'FIELD_NAME',
    type: 'bit',
    transformer: { from: (v: Buffer) => !!v.readInt8(0), to: (v) => v },
  })
  readonly field: boolean;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55224483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档