我正在使用sequelize和sequelize-auto软件包来管理我的模型,但每次我需要根据数据库中的修改重新生成模型时,我需要重新定义te关联,因为关联是在模型文件的classMethods中定义。
有一些方法可以在不同的文件中定义关联吗?
答案 0 :(得分:1)
我目前发现的最佳解决方案是在sequelize models文件夹之外创建一个像'associations.js'这样的文件,其内容如下:
module.exports = function (models) {
models.model1.hasMany(models.model2, {
onDelete: 'cascade',
foreignKey: 'model1123'
});
models.model1.Instance.prototype.getTimes = function () {
return this.x * 100;
}
};
在此文件中,您将为ypur应用程序中的每个模型设置所有关系和实例方法。 正如您所看到的,您需要传递模型对象才能使其工作,对于您的models / index.js:
'use strict'
...
Object.keys(db).forEach(function (modelName) {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
require('../utils/associations')(db);
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
只需要模块在初始化后传递sequelize对象。
希望它可以帮助别人。
答案 1 :(得分:1)
我也提供了类似的解决方案,但似乎更简单。每个模型都在一个单独的文件中定义,该文件导入到关联文件中,在该文件中,模型通过函数进行连接。该函数将被导入,执行并分配给服务器文件中的变量。可以。
associations.js文件:
Model1 = require('./Model1')
Model2 = require('./Model2')
const setAssociations = function() {
Model1.belongsTo(Model2)
}
module.exports = setAssociations;
server.js文件:
const Associations = require('./models/associations')();