我有两个模型,Article
和ArticleGroup
:
sequelize.define('article', {
GROUP_CODE: {
type: DataTypes.STRING,
},
...
}, {
classMethods: {
associate: function(models) {
this.belongsTo(models.articleGroup);
},
},
});
...
sequelize.define('articleGroup', {
GROUP_CODE: {
type: DataTypes.STRING,
},
...
});
我正在使用遗留数据,其中这两者之间的连接是使用GROUP_CODE
字段建立的。我已经为article
模型添加了一个外键。问题是当我尝试更新该外键时。这是我试图实现的代码:
let db = require('../models');
db.articleGroup.findAll().then((groups) => {
groups.forEach((group) => {
db.article.update({groupArticleId: group.id}, {where: {GROUP_CODE: group.GROUP_CODE}});
});
});
使用此代码我得到了一堆:
...
Executing (default): UPDATE `article` SET `updatedAt`='2017-08-05 12:43:02' WHERE `GROUP_CODE` = '6'
Executing (default): UPDATE `article` SET `updatedAt`='2017-08-05 12:43:02' WHERE `GROUP_CODE` = '11'
Executing (default): UPDATE `article` SET `updatedAt`='2017-08-05 12:43:02' WHERE `GROUP_CODE` = '1'
...
它正在更新updatedAt
但不更新groupArticleId
字段。我怎么能做到这一点?
答案 0 :(得分:0)
执行该关联的代码如下:
Object.keys(db).forEach(function(modelName) {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
从未完成过,因为我的模型都没有associate
属性。更改模型:
sequelize.define('article', {
...
}, {
classMethods: {
associate: function(models) {
this.belongsTo(models.articleGroup);
},
},
});
为:
let Article = sequelize.define('article', {
...
});
Article.associate = function(models) {
this.belongsTo(models.articleGroup);
}
return Article;
修复了我的问题,因为现在模型具有associate
属性,并且可以正确关联,例如Sequelize将为外键创建getter和setter。