Sequelize 4.3.2 n:m(多对多)关联:未处理的拒绝 SequelizeEagerLoadingError [英] Sequelize 4.3.2 n:m (many-to-many) association: Unhandled rejection 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,
}]
});
}
推荐答案
现在我找到了解决方案.显然他们已经删除了 classMethods
和 instanceMethods
,所以关联现在定义如下:
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屋!