I created a many-to-many association between courses and users like this:
Course.belongsToMany(User, { through: 'CourseUser'});
User.belongsToMany(Course, { through: 'CourseUser'});
which generates a join table called CourseUser.
I add a relation for a specific course and user with the following server side function that happens on the click of a button: the userCourse variable looks like this: { UserId: 7, CourseId: 13 }
addUser: function(req, res) {
var userCourse = req.body;
db.CourseUser.create(userCourse).then(function () {
res.sendStatus(200);
});
}
Is this the correct way of adding the association between an existing user and an existing course? (if not, what is the correct way)
I would like to have an ability of removing the association when clicking on another button. But I can't quite figure out how to set up the function.
I created a many-to-many association between courses and users like this:
Course.belongsToMany(User, { through: 'CourseUser'});
User.belongsToMany(Course, { through: 'CourseUser'});
which generates a join table called CourseUser.
I add a relation for a specific course and user with the following server side function that happens on the click of a button: the userCourse variable looks like this: { UserId: 7, CourseId: 13 }
addUser: function(req, res) {
var userCourse = req.body;
db.CourseUser.create(userCourse).then(function () {
res.sendStatus(200);
});
}
Is this the correct way of adding the association between an existing user and an existing course? (if not, what is the correct way)
I would like to have an ability of removing the association when clicking on another button. But I can't quite figure out how to set up the function.
- 1 Please accept my answer if it answered your question or tell me in a ment what part is still unclear to you. – leroydev Commented Feb 13, 2016 at 23:53
2 Answers
Reset to default 12- If you already have a
User
andCourse
instance and are just associating them inaddUser
, then yes, this is the correct way of creating an association between them. - You should be able to remove this association in at least 4 ways:
1: Through User
model:
User.removeCourse(courseObject);
2: Through Course
model:
Course.removeUser(userObject);
3: On the CourseUser
model, without having a CourseUser
instance available:
db.CourseUser.destroy({
where: {...}
});
4: Having a CourseUser
instance available:
courseUser.destroy();
You can bind .then
and .catch
on all these operations to do something on success / on error.
Your model relationship is okay:
Course.belongsToMany(User, { through: 'CourseUser'}); User.belongsToMany(Course, { through: 'CourseUser'});
and values:
{ UserId: 7, CourseId: 13 }
Implementation could look thus for adding a UserCourse relationship:
addUser: function(req, res) {
const { UserId, CourseId } = req.body;
db.Course.findOne({
where: { id: CourseId }
}).then(course => {
course.setUsers([UserId])
res.sendStatus(200);
}).catch(e => console.log(e));
}
while this could handle user detaching:
removeUser: function (req, res) {
const { UserId, CourseId } = req.body;
db.Course.findOne({
where: { id: CourseId }
}).then(course => {
course.removeUsers([UserId])
res.sendStatus(200);
}).catch(e => console.log(e));
}
I hope this will be helpful however