Reference Source
public class | 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') > - (7 * 24 * 60 * 60 * 1000)

Constructor Summary

Public Constructor

constructor(ReturnType: ABSTRACT, fields: Array)

Public Constructors

public constructor(ReturnType: ABSTRACT, fields: Array) source


  • optional

return type for virtual type

fields Array
  • optional

array of fields this virtual type is dependent on