在separeted文件中定义sequelize关联

时间:2017-07-05 21:10:47

标签: mysql node.js sequelize.js

我正在使用sequelize和sequelize-auto软件包来管理我的模型,但每次我需要根据数据库中的修改重新生成模型时,我需要重新定义te关联,因为关联是在模型文件的classMethods中定义。

有一些方法可以在不同的文件中定义关联吗?

2 个答案:

答案 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')();