sequelize-typcript: общий метод для get () в модели - PullRequest
0 голосов
/ 30 августа 2018

У меня есть некоторые функции get (), определенные для START_DATE, END_DATE, MEET_START_DATE, MEET_END_DATE. Если вы внимательно посмотрите на функции get (), определенные для этих столбцов, они очень похожи. Поэтому я пытался определить общую функцию для всех этих функций get (). Функция, аналогичная getDay (), определенная в конце. Но я не могу вызвать getDay () из с помощью метода get (). У меня нет доступа к нему. Как вызвать getDay () из функции get () или чего-то подобного? Мне также нужно передать параметры, чтобы у меня был доступ к имени поля и экземпляру.

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();


    }
}

1 Ответ

0 голосов
/ 30 августа 2018

Самое простое было бы определить вашу общую функцию вне класса 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 будет примерно таким же.) Если вы действительно хотите сделать его методом экземпляра, вы можете попробовать привести this к Person внутри вашего get реализации, которые могут работать в зависимости от того, что делает sequelize во время выполнения (я не знаком с этим).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...