从另一个属性对模型设置器进行序列化

时间:2019-05-20 21:21:40

标签: node.js sequelize.js

我正在尝试创建一个序列化模型,其中一个属性从其他两个属性中获取其值集,但是经过数小时的研究和尝试不同的方法,我没有任何运气。

module.exports = function (sequelize, DataTypes) {
return sequelize.define('Users', {
    id: { type: DataTypes.INTEGER, allowNull: false, autoIncrement: true, primaryKey: true },
    userName: { type: DataTypes.STRING, allowNull: false, unique: true },
    firstName: { type: DataTypes.STRING, allowNull: false },
    lastName: { type: DataTypes.STRING, allowNull: false },
    fullName: {
        type: DataTypes.STRING,
        allowNull: false,
        getterMethods: {
            fullName() {
                return this.firstName + ' ' + this.lastName
            }
        },
        setterMethods: {
            fullName(value) {
                const names = value.split(' ');
                this.setDataValue('firstName', names.slice(0, -1).join(' '));
                this.setDataValue('lastName', names.slice(0, -1).join(' '));
            }
        }
    },
    userType: { type: DataTypes.STRING, allowNull: false },
    directPhone: { type: DataTypes.STRING, allowNull: false },
    email: { type: DataTypes.STRING, allowNull: false },
    password: { type: DataTypes.STRING, allowNull: false },


})
}

基本上,我有一个用户模型,我希望“ fullname”属性是firstName和lastName属性的串联。

上面的代码是环顾四周后得到的最新版本,但肯定无法正常工作。

先谢谢了。

1 个答案:

答案 0 :(得分:0)

这应该有效:

module.exports = function (sequelize, DataTypes) {
return sequelize.define('Users', {
    id: { type: DataTypes.INTEGER, allowNull: false, autoIncrement: true, primaryKey: true },
    userName: { type: DataTypes.STRING, allowNull: false, unique: true },
    firstName: { type: DataTypes.STRING, allowNull: false },
    lastName: { type: DataTypes.STRING, allowNull: false },
    fullName: {
        type: DataTypes.STRING,
        allowNull: false,
        get: function() {
            return this.firstName + ' ' + this.lastName
        },
        set: function(value) {
            const names = value.split(' ');
            this.setDataValue('firstName', names[0]);
            this.setDataValue('lastName', names[1]);
        }
    },
    userType: { type: DataTypes.STRING, allowNull: false },
    directPhone: { type: DataTypes.STRING, allowNull: false },
    email: { type: DataTypes.STRING, allowNull: false },
    password: { type: DataTypes.STRING, allowNull: false },


})
}