Sequelize 偏执地从多个表中删除
Sequelize paranoid delete from multiple tables
我目前在我的数据库中有 post table、会话 table 和用户 table。关于 post 的对话只能在 2 个用户之间进行。
我的问题是当我删除一个 post 时,我还需要删除关于这个 post 的所有对话。
使用下面的代码,我可以从 post 的 table 中删除 post,但在对话 table 中它只是删除了 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();
}
});
});
我目前在我的数据库中有 post table、会话 table 和用户 table。关于 post 的对话只能在 2 个用户之间进行。
我的问题是当我删除一个 post 时,我还需要删除关于这个 post 的所有对话。
使用下面的代码,我可以从 post 的 table 中删除 post,但在对话 table 中它只是删除了 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();
}
});
});