2017-08-05 106 views
0

我有两个型号,ArticleArticleGroupSequelizeJS:批量设置外键

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

是没有关联的代码是如下:

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。