node.js - 将 Sequelize 与包含在多个文件中的关联和范围一起使用

标签 node.js sequelize.js

我正在使用 this way将我的 Sequelize 模型保存在单独的文件中,一切都运行良好,但现在我想到了在其中包含范围的想法。

这样的东西是行不通的:

var User = sequelize.define("User", {...}, {
  scopes: {
    complete: {
      include: [{
        model: Task
      }]
    }
  }
});

... 因为任务(当然)没有定义。即使使用 require('.').Task 在这一点上也无济于事,因为 UserTask 之前加载并且到 User 已加载,Task 尚未定义。

那么,有没有一种简单易行的方法,无需十几种变通办法

  • 协会
  • 包含的范围
  • ...所有这些都在每个模型的单独文件中?

最佳答案

如果模型(任务)尚未加载? (在这种情况下,T 在 U 之前出现,模型已加载)。

Object.keys(db).forEach(function(modelName) {
  if ("associate" in db[modelName]) {
    db[modelName].associate(db);
  }
});

成为

Object.keys(db).forEach(function(modelName) {
  if ("associate" in db[modelName]) {
    db[modelName].associate(db);
  }
});

Object.keys(db).forEach(function(modelName) {
  if ("loadScopes" in db[modelName]) {
    db[modelName].loadScopes(db);
  }
});

和模型

module.exports = function(sequelize, DataTypes) {
  var User = sequelize.define("User", {
    username: DataTypes.STRING
  }, {
    classMethods: {
      associate: function(models) {
        User.hasMany(models.Task)
      }
    }
  });

  return User;
};

成为

module.exports = function(sequelize, DataTypes) {
  var User = sequelize.define("User", {
    username: DataTypes.STRING
  }, {
    classMethods: {
      associate: function(models) {
        User.hasMany(models.Task)
      }

      loadScopes: function(models) {
        User.addScope('complete', {
          include: [{
            model: models.Task
          }]
        })
      }

    }
  });

  return User;
};

关于node.js - 将 Sequelize 与包含在多个文件中的关联和范围一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34407193/

相关文章:

node.js - MongoDB:$lookup 返回空数组

node.js - Angular 6 和 karma 'Can not load "@angular-devkit/build-angular",它没有注册'

javascript - 在 Sequelize Attribute 中编写自定义函数

node.js - NodeJs + Sequelize + Express 查询时添加的额外关联键

node.js - Sequelize : Can't do update on column UpdatedAt

javascript - 'require(' ./app/routes.js')(app);' 是什么意思在此 Node 服务器示例中是什么意思?

node.js - nodeJS ZeroMQ : why cant send message if sock. 未在 setInterval 中发送

javascript - 如何使用 typescript 定义文件中的枚举?

mysql - 渴望使用 sequelizejs 在模型定义上加载关联实体

node.js - Sequelizejs 在列上运行函数时出错 - check_ungrouped_columns_walker in