我目前在我的数据库中有一个帖子表、对话表和一个用户表。关于帖子的对话只能在 2 个用户之间进行。
我的问题是当我删除一个帖子时,我也需要删除关于这个帖子的所有对话。
使用下面的代码,我可以从我的帖子表中删除帖子,但在对话表中,它只是从相应对话的 postId 列中删除 postId,而不是整行。
router.delete("/:id", (req, res) => {
console.log(req.params);
let { id } = req.params;
Post.findByPk(id).then((post) => {
if (post) {
return post.setConversations([]).then(() => {
return post.destroy();
});
} else {
return Promise.reject();
}
})
.then(()=>{
res.status(204).send();
},()=>{
res.status(404).send();
})
});
我也尝试过使用 CASCADE 但不幸的是它没有用。Post.hasMany(Conversation, {
foreignKey: "PostId",
// onDelete: 'CASCADE'
});
Conversation.belongsTo(Post,{
foreignKey: "PostId",
allowNull: false,
// onDelete: 'CASCADE'
})
最佳答案
我设法让它工作,但有人可以告诉我我在做什么是正确的。
router.delete("/:id", (req, res) => {
console.log(req.params);
let { id } = req.params;
Post.findByPk(id).then((post) => {
if (post) {
Promise.all([
post.destroy(),
Conversation.destroy({where:{PostId:req.params.id}})
]).then(() => {
res.status(204).send();
}),
} else {
res.status(404).send();
}
});
});
关于postgresql - Sequelize 从多个表中删除偏执,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65234954/