生成迁移时如何将createdAt和updatedAt设置为时间戳而不是时间戳(6)?

问题描述 投票:0回答:1

我的项目中有 MySQL 数据库和 TypeORM。

我的实体定义如下:

export const CompanyRadarTypeEntity = new EntitySchema<ICompanyRadarTypeEntity>({
    name: 'companyRadarType',
    tableName: 'companyRadarType',
    columns: {
        idCompanyRadarType: {
            type: Number,
            primary: true,
            generated: true,
        },
        type: {
            type: String,
        },
        idCompany: {
            type: Number,
        },
        createdAt: {
            type: 'timestamp',
            default: () => 'CURRENT_TIMESTAMP',
            nullable: false,
            createDate: true,
        },
        updatedAt: {
            type: 'timestamp',
            default: () => 'CURRENT_TIMESTAMP',
            nullable: false,
            updateDate: true,
        },
    },
    relations: {
        company: {
            type: 'many-to-one',
            target: 'company',
            joinColumn: {
                name: 'idCompany',
                referencedColumnName: 'idCompany',
            },
        },
        companyRadars: {
            type: 'one-to-many',
            target: 'companyRadar',
            inverseSide: 'companyRadarType',
        },
    },
});

当我使用 typeorm 生成迁移时,它会给出以下 SQL:

await queryRunner.query(`
            CREATE TABLE \`companyRadarType\` (
                \`idCompanyRadarType\` int NOT NULL AUTO_INCREMENT,
                \`type\` varchar(255) NOT NULL,
                \`idCompany\` int NOT NULL,
                \`createdAt\` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
                \`updatedAt\` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(6),
                PRIMARY KEY (\`idCompanyRadarType\`)
            ) ENGINE = InnoDB
        `);

但是当我运行迁移时,它给了我错误:迁移运行期间出错:QueryFailedError:ER_INVALID_DEFAULT:'createdAt'的默认值无效

我注意到,当我从实体中删除 createDate: true 和 updateDate: true 时,它会将 timestamp(6) 类型替换为时间戳,但 SQL 没有 ON UPDATE CURRENT_TIMESTAMP 部分。

这种情况我能做什么?

mysql node.js typeorm
1个回答
0
投票

CURRENT_TIMESTAMP
是一个日期函数,所以必须这样调用:

CURRENT_TIMESTAMP(6)

这将为您提供如下值:

2023-12-20 16:21:28.62815

© www.soinside.com 2019 - 2024. All rights reserved.