javascript - Sequelize - 从父实例中删除关联记录

标签 javascript node.js sequelize.js

我试图找到一种方法,通过具有许多子项(食物)的父模型(菜单)从数据库中删除行。我只想删除某些行,而不是全部。
菜单.js

...
Menu.hasMany(models.Food, {
 as: 'foods',
 foreignKey: 'menuId',
 sourceKey: 'id'
});
...
在我的 Controller 中,我尝试从菜单中删除某些食物。
...
const result = await menu.destroyFoods({
  where: {
    name: ['Pasta', 'Pizza']
  }
});
...
我也尝试过单数 destroyFood 。对于两者,我都得到了 destoryFood/destoryFoods is not a function 。有没有什么简单的方法可以从 menu 的实例中做到这一点? Sequelize 的新手,希望得到一些帮助。谢谢。
谢谢

最佳答案

您可以使用 menu.removeFoods()menu.removeFood() - 有关更多信息,请参阅 Special methods/mixins added to instances: Foo.hasMany(Bar)
您还需要使用 Op.in query operatorFood.name 指定多个值。

const { Op } = require('sequelize');

const result = await menu.removeFoods({
  where: {
    name: {
      [Op.in]: ['Pasta', 'Pizza'],
    }
  }
});
这等效于调用 Food.destroy(),其中 menuId 等于早期结果中的 menu.id
const results = await Food.destroy({
  where: {
    menuId: menu.id,
    name: {
      [Op.in]: ['Pasta', 'Pizza'],
    },
  },
});

关于javascript - Sequelize - 从父实例中删除关联记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64506670/

相关文章:

javascript - 如何刷新 Fuel UX 数据网格中的数据?

node.js - 为什么我必须以管理员身份调用 npm link?

python - 使用 json 从 Node 到 python 进行通信给我错误

node.js - 如何在node js和sequelize之外使用promise返回数据?

node.js - Sequelize 路由器不起作用。当我访问页面时,我得到 "Cannot GET/"

node.js - 协会使用了错误的列

javascript - 带音频标签的 Safari 浏览器不起作用

javascript - webpack --env.production 和 --mode ="production"有什么区别

node.js - 如何将配置从配置服务传递给 Nest.js 装饰器?

javascript - 类内部的bind()与 "classic"对象内部的bind