Sequelize hasMany issue issue
In my application, a user can have several module
that are stored in a table user_has_module
. This means that for each line, user_has_module
I want to include module
where matches module_id
.
module
Module = sequelize.define('module', {
academy_id: {
type: DataTypes.INTEGER,
primaryKey: true
},
module_id: {
type: DataTypes.INTEGER,
primaryKey: true
},
module_module_type_id: DataTypes.INTEGER,
sort_number: DataTypes.INTEGER,
score_to_pass: DataTypes.INTEGER
}, {
freezeTableName: true
})
user_has_module
User_has_module = sequelize.define('user_has_module', {
user_id: {
type: DataTypes.INTEGER,
primaryKey: true
},
module_id: {
type: DataTypes.INTEGER,
primaryKey: true
},
academy_team_id: {
type: DataTypes.INTEGER,
primaryKey: true
},
academy_id: {
type: DataTypes.INTEGER,
primaryKey: true
},
sort_number: DataTypes.INTEGER,
is_complete: DataTypes.INTEGER,
score_to_pass: DataTypes.INTEGER,
is_open: DataTypes.INTEGER,
deadline: DataTypes.DATE
}, {
freezeTableName: true
})
My relationship
User_has_module.belongsTo(Module, {foreignKey: 'module_id'});
Now I want to join them on module.module_id = user_has_module.module_id
.
My problem is that it module
has, as you can see, two primary key
, and when sequelize joins these two tables, it selects academy_id
as its own primary key
.
My question is, is there a way to say Sequelize
which in this respect it should choose primary key
module_id
from module
?
source to share
I guess you don't need the User_has_module model. I am assuming you have one model called User and one module to call the model.
So, you should have designed something like this:
var User = sequelize.define("User", {
name: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
User.hasMany(models.Module);
}
}
});
And for your module:
var Module = sequelize.define("Module", {
name: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
Module.belongsToMany(models.User);
}
}
});
To get a user with their modules, you can do this:
models.User.findAll({ include: [models.Module]}).then(function(users){
console.log(users);
});
Hope I understood your question correctly and it helps. Greetings
source to share