- 获取器与设置器是在模型定义时,对数据项进行输入与输出的数据处理,一般用于自动填充、格式化输入输出等功能。
数据项属性中的get()
方法即获取器,set(value)
方法即设置器。如下述定义中的first_name
数据项。
- 虚拟字段是在模型定义时,对数据库字段内容进行组合或处理后得到的新字段,这个类型的字段不需要存储在数据库中,一般用于后台数据的填充。
数据项属性中的类型属性,设置为DataTypes.VIRTUAL
,即可该数据项为虚拟字段。如下述定义中的full_name
数据项。
const { Sequelize, Model, DataTypes } = require('sequelize');
const { Op } = require('sequelize');
const config = require('./config/mysql.config');
const sequelize = new Sequelize(config.database, config.username, config.password, {
host: config.host,
dialect: config.dialect,
pool: config.pool
});
class UserModel extends Model { }
UserModel.init({
first_name: {
type: DataTypes.STRING,
get() {
let first_name = this.getDataValue('first_name');
return first_name ? first_name.toUpperCase() : null;
},
set(value) {
let first_name = value ? value.toUpperCase() : null;
this.setDataValue('first_name', first_name);
},
allowNull: false
},
last_name: {
type: DataTypes.STRING,
allowNull: true
},
full_name: {
type: DataTypes.VIRTUAL,
get() {
return `${this.first_name} ${this.last_name}`;
},
set(value) {
throw new Error('Donot set `fullName` value');
}
},
birthday: {
type: DataTypes.DATEONLY,
allowNull: true
},
sex: {
type: DataTypes.ENUM('male', 'female'),
allowNull: true
},
teacher_id: {
type: Sequelize.INTEGER,
references: {
model: 't_teachers',
key: 'id'
}
},
enable: {
type: DataTypes.BOOLEAN,
allowNull: true,
defaultValue: true
}
}, {
sequelize,
modelName: 't_users',
freezeTableName: true,
timestamps: false
});
(async () => {
let user_4 = await UserModel.findAll({
where: {
first_name: 'guangming'
}
});
console.log(user_4);
console.log(JSON.stringify(user_4, null, 2));
})();
(async () => {
await UserModel.create({
first_name: 'chen',
last_name: 'chen',
birthday: '2020-05-20',
sex: 'male',
teacher_id: 1,
enable: 1
});
})();