如何使用 sequelize / mysql 删除特定实例的关系

how to remove relation for specific instances with sequelize / mysql

我在课程和用户之间创建了这样的多对多关联:

Course.belongsToMany(User, { through: 'CourseUser'});
User.belongsToMany(Course, { through: 'CourseUser'});

这会生成一个名为 CourseUser 的连接 table。

我为特定课程和用户添加了一个关系,该关系具有以下服务器端功能,该功能在单击按钮时发生: 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. 如果您已经有一个 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,以便在成功/出错时执行某些操作。

你的模特关系还好:

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

我希望这会有所帮助