如何在没有额外查询的情况下删除sequelize中的关联?

时间:2015-05-16 13:25:55

标签: mysql node.js orm sequelize.js

我在int i = 30543; char c1 = (char) i; char c2 = (char) (i>>8); exercise模型之间有很多关联。 我删除单个关联

muscle

ORM运行3个查询,其中2个类似

models.Exercise.find({where: {id: exerciseId}})
                .then(function(exercise){
                    exercise.removeMuscle(muscleId);
                    res.sendStatus(200);
                });

有没有办法避免重复查询?如果我可以逃避第一个和第二个查询并且只运行实际做一些有用的第三个查询,那将是完美的吗?

1 个答案:

答案 0 :(得分:6)

你可以像documentation using set function一样传递相关对象的数组而没有你试图删除的对象。但这无论如何基本上都会留下三个问题。

为了在一个DELETE查询中创建它,您需要在代码中添加一个tie模型。在你的情况下,它看起来像这样:

models.Exercise = sequelize.define("exercise", {
   /* attributes */
});

models.Muscle = sequelize.define("muscle", {
   /* attributes */
});

models.exercise_muscle_tie = sequelize.define("exercise_muscle_tie", {
}, {
    freezeTableName: true
});

models.Exercise.belongsToMany(models.Muscle, { as: 'muscles', foreignKey: 'exerciseId', through: models.exercise_muscle_tie });
models.Muscle.belongsToMany(models.Exercise, { as: 'exercises', foreignKey: 'muscleId', through: models.exercise_muscle_tie });

在您定义它并将其与belongsToMany关联到模型后,您的删除脚本将是:

models.exercise_muscle_tie.destroy({ where: { exerciseId: 1856, muscleId: 57344 } })

生成的SQL:

Executing (default): 
DELETE FROM `exercise_muscle_tie` WHERE `exerciseId` = 1856 AND `muscleId` = 57344