为什么我可以直接从sequelize模型访问数据值?

时间:2018-02-01 14:46:27

标签: javascript mysql orm sequelize.js

所以我的问题很简单,如果你在续集中做一个选择,它将返回一个模型。如果您打印出该模型,您可以清楚地看到该模型有一堆选项,dataValues,_prevValues,_change,_options,isNewRecord等。然而,对我来说奇怪的是,您也可以直接访问数据值,例如。

myModel.myCustomAttribute可以工作,但根据数据结构,我必须输入myModel.dataValues.myCustomAttribute。

sequelize如何做到这一点以及我缺少哪些方面?

1 个答案:

答案 0 :(得分:1)

一个案例是getter方法。如果您需要getter方法中的值,并且使用this.myProperty,则会出现递归问题。相反,你可以使用this.dataValues.myProperty。例如:

var Article = db.define('article', {
  title: {
    type: Sequelize.STRING,
    allowNull: false,
    validate: {
      notEmpty: true
    }
  },
  content: {
    type: Sequelize.TEXT,
    allowNull: false
  },
  tags: {
    type: Sequelize.ARRAY(Sequelize.TEXT),
    defaultValue: []
  }

}, {
  getterMethods: {
    tags() {
      return this.getDataValue.tags.join(', ');
    }
  }
});

在这种情况下,如果您改为尝试使用:

  getterMethods: {
    tags() {
      return this.tags.join(', ');
    }
  }

由于tags()调用自身,你会得到一个递归的混乱。