Sequelize 4.3.2 n:m(多对多)关联:未处理的拒绝 SequelizeEagerLoadingError [英] Sequelize 4.3.2 n:m (many-to-many) association: Unhandled rejection SequelizeEagerLoadingError

查看:54
本文介绍了Sequelize 4.3.2 n:m(多对多)关联:未处理的拒绝 SequelizeEagerLoadingError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有 3 个模型:用户、项目、用户项目:

I have 3 models: User, Project, UserProject:

module.exports = function (sequelize, DataTypes) {
  var User = sequelize.define('User', {
  title: DataTypes.STRING,
  description: DataTypes.STRING
}, {
  classMethods: {
    associate: function (models) {
      User.belongsToMany(models.Project, { 
        through: 'UserProject',
        foreignKey: 'userId'
      })
    }
  },
  freezeTableName: true
})
  return User
}


module.exports = function (sequelize, DataTypes) {
  var Project = sequelize.define('Project', {
  title: DataTypes.STRING,
  description: DataTypes.STRING
  }, {
  classMethods: {
    associate: function (models) {
      Project.belongsToMany(models.User, { 
        through: 'UserProject',
        foreignKey: 'projectId'
      })
    }
  },
  freezeTableName: true
})
  return Project
}


module.exports = function (sequelize, DataTypes) {
 var UserProject = sequelize.define('UserProject', {
  userId: DataTypes.INTEGER,
  projectId: DataTypes.INTEGER,
 }, {
  classMethods: {
 },
  freezeTableName: true
 })
  return UserProject
}

上面的代码与一些旧版本的 Sequelize 完美配合.现在我更新到 Sequelize 4.3.2,尝试使用这些模型时出现以下错误:

The code above worked perfectly with some old version of Sequelize. Now I updated to Sequelize 4.3.2 and I get the following error when trying to use these models:

未处理的拒绝 SequelizeEagerLoadingError:项目与用户无关!

这有什么问题吗?我正在尝试在这里进行多对多关联,并在 findAll Projects 时包含用户,反之亦然.我使用 MySQL 作为数据库.

What is wrong with this? I'm trying to do many-to-many association here, and get Users included when findAll Projects and vice versa. I'm using MySQL as a database.

这是 findAll 部分:

Here is the findAll-part:

function getUsersWithProjects (request, response, next) {
  models.User.findAll({
    include: [{
      model: models.Project,
    }]
  });
}

推荐答案

现在我找到了解决方案.显然他们已经删除了 classMethodsinstanceMethods,所以关联现在定义如下:

Now I found the solution. Apparently they have removed classMethods and instanceMethods, so associations is now defined like this:

module.exports = function (sequelize, DataTypes) {
  var User = sequelize.define('User', {
    title: DataTypes.STRING,
    description: DataTypes.STRING
  }, {
   freezeTableName: true
  })
  User.associate = function (models) {
   User.belongsToMany(models.Project, { 
    through: 'UserProject',
    foreignKey: 'userId'
   })
 };
 return User
}

来源:http://docs.sequelizejs.com/manual/教程/升级到 v4.html

这篇关于Sequelize 4.3.2 n:m(多对多)关联:未处理的拒绝 SequelizeEagerLoadingError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆