如何使用Sequelize / MySQL删除特定实例的关系

6
我创建了一个课程和用户之间的多对多关联,如下所示:

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);
    });
  }
  1. 这是将现有用户和现有课程之间建立关联的正确方式吗?(如果不是,正确的方式是什么)

  2. 我希望能够在单击另一个按钮时删除关联。但我无法弄清如何设置该功能。


1
如果我的回答解决了你的问题,请接受我的答案。如果还有不清楚的地方,请在评论中告诉我。 - leroydev
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
10
  1. 如果您已经拥有一个UserCourse实例,并且只是在addUser中将它们关联起来,那么这确实是创建它们之间关联的正确方式。
  2. 您应该能够以至少4种方式删除此关联:

1:通过User模型:

User.removeCourse(courseObject);

2:通过Course模型:

Course.removeUser(userObject);

3:在没有CourseUser实例的情况下,对CourseUser模型进行操作:

db.CourseUser.destroy({
    where: {...}
});

4:拥有一个可用的CourseUser实例:

courseUser.destroy();
您可以在所有这些操作上绑定.then.catch,以便在成功/出错时执行某些操作。

2
您的模型关系是正确的:
Course.belongsToMany(User, { through: 'CourseUser'}); User.belongsToMany(Course, { through: 'CourseUser'});

并且包含以下数值:
{ UserId: 7, CourseId: 13 }

对于添加用户课程关系,实现如下:

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));
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,