我正试图找到一种方法,通过具有许多子对象(食物(的父模型(菜单(从DB中删除行。不过,我只想删除某些行,而不是全部。
菜单.js
...
Menu.hasMany(models.Food, {
as: 'foods',
foreignKey: 'menuId',
sourceKey: 'id'
});
...
在我的控制器中,我有以下内容来尝试从菜单中删除某些食物。
...
const result = await menu.destroyFoods({
where: {
name: ['Pasta', 'Pizza']
}
});
...
我也试过单数destroyFood
。对于两者,我都得到了destoryFood/destoryFoods is not a function
。从menu
的实例来看,有什么简单的方法可以做到这一点吗?新的续集,希望得到一些帮助。谢谢
感谢
您可以使用menu.removeFoods()
和menu.removeFood()
-有关详细信息,请参阅添加到实例的特殊方法/混合项:Foo.hasMany(Bar(。
您还需要使用Op.in
查询运算符为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'],
},
},
});