如何在没有额外查询的情况下去除续集中的关联?

我有许多到exercisemuscle模型之间的联系。 我删除单个关联

 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) 

有没有办法避免重复查询? 如果我能逃避第一个和第二个查询,并且只运行第三个实际上有用的事情,那将是完美的。

你可以像在文档中那样使用set函数传递关联对象的数组而不是你试图删除的那个。 但是,这基本上留给你三个查询。

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

 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