首页 > 解决方案 > sequelize-typescript:模型中 get() 的常用方法

问题描述

我为 START_DATE、END_DATE、MEET_START_DATE、MEET_END_DATE 定义了一些 get() 函数。如果您仔细查看为这些列定义的 get() 函数,它们非常相似。所以我试图为所有这些 get() 函数定义一个通用函数。最后定义了一个类似于 getDay() 的函数。但我无法在 get() 方法中调用 getDay()。我无权访问它。 如何从 get() 函数或类似函数调用 getDay()?我还需要传递参数,以便我可以访问字段名称和实例。

import {Table, Column, Model, DataType} from 'sequelize-typescript';

@Table({
    timestamps: false,
    freezeTableName: true,
    schema: 'TEST',
    tableName: 'Person'
})
export class Person extends Model<Person> {
    @Column({ type: DataType.STRING, primaryKey: true })
    ID: string;
    @Column(DataType.STRING)
    NAME: string;      
    @Column({type:DataType.DATEONLY,
        get(){
            let value : Date = this.getDataValue('START_DATE');
            return value.getDay();
        }})
    START_DATE: Date;
    @Column({type:DataType.DATEONLY,
        get(){
            let value : Date = this.getDataValue('END_DATE');
            return value.getDay();
        }})
    END_DATE: Date;
    @Column({type:DataType.DATEONLY,
        get(){
            let value : Date = this.getDataValue('MEET_START_DATE');
            return value.getDay();
        }})
    MEET_START_DATE: Date;
    @Column({type:DataType.DATEONLY,
        get(){
            let value : Date = this.getDataValue('MEET_END_DATE');
            return value.getDay();

            }})
    MEET_END_DATE: Date;


     getDay(field,instance) {
        let value : Date = instance.getDataValue(field);
        return value.getDay();


    }
}

标签: node.jstypescriptmodelsequelize.js

解决方案


最简单的事情是在Person类之外定义你的通用函数:

import {Table, Column, Model, DataType} from 'sequelize-typescript';

function getDayOfField(field: string, instance: Model<any>) {
    let value : Date = instance.getDataValue(field);
    return value.getDay();
}

@Table({
    timestamps: false,
    freezeTableName: true,
    schema: 'TEST',
    tableName: 'Person'
})
export class Person extends Model<Person> {
    @Column({ type: DataType.STRING, primaryKey: true })
    ID: string;
    @Column(DataType.STRING)
    NAME: string;      
    @Column({type:DataType.DATEONLY,
        get(){ return getDayOfField('START_DATE', this); }})
    START_DATE: Date;
    @Column({type:DataType.DATEONLY,
        get(){ return getDayOfField('END_DATE', this); }})
    END_DATE: Date;
    @Column({type:DataType.DATEONLY,
        get(){ return getDayOfField('MEET_START_DATE', this); }})
    MEET_START_DATE: Date;
    @Column({type:DataType.DATEONLY,
        get(){ return getDayOfField('MEET_END_DATE', this); }})
    MEET_END_DATE: Date;
}

(定义和调用它作为一个静态方法Person将大致相同。)如果你真的想把它变成一个实例方法,你可以尝试在你的实现中强制转换thisPersonget可能取决于 sequelize 在运行时所做的事情(I'我不熟悉它)。


推荐阅读