我试图找到一种方法,通过具有许多子项(食物)的父模型(菜单)从数据库中删除行。我只想删除某些行,而不是全部。
菜单.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 operator 为 Food.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/