【问题标题】:Why can I access data values directly from a sequelize model?为什么我可以直接从 sequelize 模型访问数据值?
【发布时间】:2018-07-11 22:31:45
【问题描述】:
所以我的问题很简单,如果你在 sequelize 中进行一次选择,它将返回一个模型。如果您打印出该模型,您可以清楚地看到该模型有一堆选项,dataValues、_prevValues、_change、_options、isNewRecord 等。但对我来说奇怪的是,您还可以直接访问数据值,例如。
myModel.myCustomAttribute 将起作用,但根据数据结构,我必须键入 myModel.dataValues.myCustomAttribute。
sequelize 是如何做到这一点的,我缺少什么方面?
【问题讨论】:
标签:
javascript
mysql
orm
sequelize.js
【解决方案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() 调用自身,你会遇到递归混乱。