Mysql 如何在sequelize中删除关联而无需额外查询?

Mysql 如何在sequelize中删除关联而无需额外查询?,mysql,node.js,orm,sequelize.js,Mysql,Node.js,Orm,Sequelize.js,我在运动和肌肉模型之间有多对多的关联。 我删除单一关联 models.Exercise.find({where: {id: exerciseId}}) .then(function(exercise){ exercise.removeMuscle(muscleId); res.sendStatus(200); }); ORM运行3个查询,其中2个类似

我在
运动
肌肉
模型之间有多对多的关联。 我删除单一关联

models.Exercise.find({where: {id: exerciseId}})
                .then(function(exercise){
                    exercise.removeMuscle(muscleId);
                    res.sendStatus(200);
                });
ORM运行3个查询,其中2个类似

Executing (default): SELECT `Muscule`.`id`, `Muscule`.`title`, `Muscule`.`description`, `Muscule`.`video`, `Muscule`.`createdAt`,
    `Muscule`.`updatedAt`, `muscle_exercise`.`createdAt` AS `muscle_exercise.createdAt`, `muscle_exercise`.`updatedAt` AS `muscle_
    exercise.updatedAt`, `muscle_exercise`.`MusculeId` AS `muscle_exercise.MusculeId`, `muscle_exercise`.`ExerciseId` AS `muscle_exercise.ExerciseId` FROM `Muscules` AS `Muscule` INNER JOIN `muscle_exercise` AS `muscle_exercise` ON `Muscule`.`id` = `muscle_exercise`.`MusculeId` AND `muscle_exercise`.`ExerciseId` = 11;



 Executing (default): SELECT `Muscule`.`id`, `Muscule`.`title`, `Muscule`.`description`, `Muscule`.`video`, `Muscule`.`createdAt`,
    `Muscule`.`updatedAt`, `muscle_exercise`.`createdAt` AS `muscle_exercise.createdAt`, `muscle_exercise`.`updatedAt` AS `muscle_
    exercise.updatedAt`, `muscle_exercise`.`MusculeId` AS `muscle_exercise.MusculeId`, `muscle_exercise`.`ExerciseId` AS `muscle_exercise.ExerciseId` FROM `Muscules` AS `Muscule` INNER JOIN `muscle_exercise` AS `muscle_exercise` ON `Muscule`.`id` = `muscle_exercise`.`MusculeId` AND `muscle_exercise`.`ExerciseId` = 11;


    Executing (default): DELETE FROM `muscle_exercise` WHERE `ExerciseId` = 11 AND `MusculeId` IN (52)
有没有办法避免重复查询?如果我可以避开第一个和第二个查询,只运行第三个查询,这将是非常完美的。第三个查询实际上做了一些有用的事情。

您可以像传递关联对象数组一样进行操作,而不需要尝试移除的对象。但这基本上给你留下了三个问题

为了在一个DELETE查询中实现它,您需要在代码中添加一个tie模型。在您的情况下,它将如下所示:

models.Exercise=sequelize.define(“Exercise”{
/*属性*/
});
models.Muscle=sequelize.define(“Muscle”{
/*属性*/
});
models.exercise\u muscle\u tie=续集。定义(“exercise\u muscle\u tie”{
}, {
冻结表名称:true
});
models.Exercise.belongstomy(models.Muscle,{as:'muscles',foreignKey:'exerciseId',through:models.Exercise\u Muscle\u tie});
models.Muscle.belongstomy(models.Exercise,{as:'exercises',foreignKey:'muscleId',通过:models.Exercise\u Muscle\u tie});
定义并将其与模型的
belongToMany
关联后,删除脚本将为:

生成的SQL:

Executing (default): 
DELETE FROM `exercise_muscle_tie` WHERE `exerciseId` = 1856 AND `muscleId` = 57344
您可以像传递关联对象数组而不传递试图删除的对象一样来执行此操作。但这基本上给你留下了三个问题

为了在一个DELETE查询中实现它,您需要在代码中添加一个tie模型。在您的情况下,它将如下所示:

models.Exercise=sequelize.define(“Exercise”{
/*属性*/
});
models.Muscle=sequelize.define(“Muscle”{
/*属性*/
});
models.exercise\u muscle\u tie=续集。定义(“exercise\u muscle\u tie”{
}, {
冻结表名称:true
});
models.Exercise.belongstomy(models.Muscle,{as:'muscles',foreignKey:'exerciseId',through:models.Exercise\u Muscle\u tie});
models.Muscle.belongstomy(models.Exercise,{as:'exercises',foreignKey:'muscleId',通过:models.Exercise\u Muscle\u tie});
定义并将其与模型的
belongToMany
关联后,删除脚本将为:

生成的SQL:

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