【问题标题】:Typeorm using class-transformer to change value in tableTypeorm 使用类转换器更改表中的值
【发布时间】:2022-01-26 17:50:46
【问题描述】:

我正在使用带有 Typeorm 和库 class-transformer 的 Nest.js:

import { Transform } from 'class-transformer';

@PrimaryGeneratedColumn()
@Transform(
    ({ value }) => `${value}/${moment().format('MM-YYYY')}`,
)
invoiceNumber: string;

我正在尝试产生这样的想法:1/01-2022。但我仍然只有一个数字,例如 1(没有日期)。

如何将日期添加到增量值?

【问题讨论】:

    标签: typeorm nest class-transformer


    【解决方案1】:

    您可以使用transformer 选项:指定一个值转换器(或值转换器数组),用于在读取或写入数据库时​​(取消)编组此列。在数组的情况下,值转换器将按从 entityValue 到 databaseValue 的自然顺序应用,并以从 databaseValue 到 entityValue 的相反顺序应用。

    transformer有两种方法:

    1. to:用于在写入数据库时​​编组数据。
    2. from:用于从数据库读取数据时解组数据。
    class YourClass {
      @Column({
        primary: true, // Marks column as primary
        transformer: {
          to(value) {
            // Transform 'invoiceNumber'
            return `${value}/${moment().format('MM-YYYY')}`;
          }
          from(value) {
            // Do nothing
            return value;
          }
        },
        /* Other options... */
      })
      invoiceNumber: string;
    }
    

    请注意,装饰器不再是@PrimaryGeneratedColumn,而是一个“简单”的@Column,其中primary 选项设置为true。 前面的装饰器仅用作表生成的主列。 它创建的列是主要的,它的值是自动生成的。

    【讨论】:

    • 我不知道为什么,但是valueto 中返回undefined
    • 当你保存一个实体时,你必须用一个值填充发票编号,否则它是未定义的。
    • 如果您想要自动生成某些内容,您必须在数据库上执行此操作。例如自动增量
    猜你喜欢
    • 2021-10-08
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    相关资源
    最近更新 更多