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

时间:2016-01-16 20:13:53

标签: javascript mysql node.js database sequelize.js

我在课程和用户之间建立了多对多关联,如下所示:

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. 我希望能够在点击其他按钮时删除关联。但我无法弄清楚如何设置这个功能。

2 个答案:

答案 0 :(得分:4)

  1. 如果您已经拥有UserCourse实例并且只是在addUser中关联它们,那么是的,这是在它们之间创建关联的正确方法。
  2. 您应该能够以至少4种方式删除此关联:
  3. 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));
}

我希望这会有所帮助