我有 3 个模型:用户、项目、用户项目:
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,在尝试使用这些模型时出现以下错误:
未处理的拒绝 SequelizeEagerLoadingError:项目未关联到用户!
这有什么问题吗?我试图在这里进行多对多关联,并在 findAll Projects 时包含 Users ,反之亦然。我正在使用 MySQL 作为数据库。
这是 findAll 部分:
function getUsersWithProjects (request, response, next) {
models.User.findAll({
include: [{
model: models.Project,
}]
});
}
最佳答案
现在我找到了解决方案。显然他们已经删除了 classMethods
和 instanceMethods
,所以关联现在定义如下:
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/tutorial/upgrade-to-v4.html
关于javascript - Sequelize 4.3.2 n :m (many-to-many) association: Unhandled rejection SequelizeEagerLoadingError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45151194/