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

myModel.myCustomAttribute 将起作用,但根据数据结构,我必须键入 myModel.dataValues.myCustomAttribute。

sequelize 如何做到这一点,我错过了哪些方面?

最佳答案

一种情况是在 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() 调用自身,您会遇到递归困惑。

关于javascript - 为什么我可以直接从 sequelize 模型访问数据值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48565470/

10-16 18:48