我在课程和用户之间建立了多对多关联,如下所示:
Course.belongsToMany(User, { through: 'CourseUser'});
User.belongsToMany(Course, { through: 'CourseUser'});
生成一个名为CourseUser的连接表。
我为特定课程和用户添加了一个关系,其中包含单击按钮时发生的以下服务器端功能: userCourse变量如下所示:{UserId:7,CourseId:13}
addUser: function(req, res) {
var userCourse = req.body;
db.CourseUser.create(userCourse).then(function () {
res.sendStatus(200);
});
}
这是在现有用户和现有课程之间添加关联的正确方法吗? (如果不是,正确的方法是什么)
我希望能够在点击其他按钮时删除关联。但我无法弄清楚如何设置这个功能。
答案 0 :(得分:4)
User
和Course
实例并且只是在addUser
中关联它们,那么是的,这是在它们之间创建关联的正确方法。 1:通过User
模型:
User.removeCourse(courseObject);
2:通过Course
模型:
Course.removeUser(userObject);
3:在CourseUser
模型上,没有可用的CourseUser
实例:
db.CourseUser.destroy({
where: {...}
});
4:拥有CourseUser
个实例:
courseUser.destroy();
您可以在所有这些操作上绑定.then
和.catch
,以便在成功/出错时执行某些操作。
答案 1 :(得分:1)
您的模型关系还可以:
Course.belongsToMany(User, { through: 'CourseUser'}); User.belongsToMany(Course, { through: 'CourseUser'});
和值:
{ UserId: 7, CourseId: 13 }
实现可能会因此添加UserCourse关系:
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));
}
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));
}