static/v5/class/lib/data-types.js~VIRTUAL.html
publicclass| source
lib/data-types.js~ABSTRACT → VIRTUAL
A virtual value that is not stored in the DB. This could for example be useful if you want to provide a default value in your model that is returned to the user but not stored in the DB.
You could also use it to validate a value before permuting and storing it. VIRTUAL also takes a return type and dependency fields as arguments If a virtual attribute is present in attributes it will automatically pull in the extra fields as well. Return type is mostly useful for setups that rely on types like GraphQL.
Checking password length before hashing it
sequelize.define('user', {
password_hash: DataTypes.STRING,
password: {
type: DataTypes.VIRTUAL,
set: function (val) {
// Remember to set the data value, otherwise it won't be validated
this.setDataValue('password', val);
this.setDataValue('password_hash', this.salt + val);
},
validate: {
isLongEnough: function (val) {
if (val.length < 7) {
throw new Error("Please choose a longer password")
}
}
}
}
})
# In the above code the password is stored plainly in the password field so it can be validated, but is never stored in the DB.
Virtual with dependency fields
{
active: {
type: new DataTypes.VIRTUAL(DataTypes.BOOLEAN, ['createdAt']),
get: function() {
return this.get('createdAt') > Date.now() - (7 * 24 * 60 * 60 * 1000)
}
}
}
| Public Constructor | | public |
constructor(ReturnType: ABSTRACT, fields: Array)
| |
| Name | Type | Attribute | Description | | ReturnType | ABSTRACT |
|
return type for virtual type
| | fields | Array |
|
array of fields this virtual type is dependent on
|