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
}
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:
Unhandled rejection SequelizeEagerLoadingError: Project is not associated to User!
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.
Here is the findAll-part:
function getUsersWithProjects (request, response, next) {
models.User.findAll({
include: [{
model: models.Project,
}]
});
}
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
}
Source: http://docs.sequelizejs.com/manual/tutorial/upgrade-to-v4.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With