✅ Sequelize에서 delete가 안될 때
분명 삭제destroy
를 쓰면 삭제된다고 하는데 Update 쿼리가 날라가는 겁니다. 이상하다...
원인을 알아보니 destroy
는 소프트삭제, 하드삭제 2가지 모드가 존재했습니다.
기본적으로 destroy
는 소프트 삭제가 발생합니다.
await Post.destroy({
where: {
id: 1
}
});
// UPDATE "posts" SET "deletedAt"=[timestamp] WHERE "deletedAt" IS NULL AND "id" = 1
테이블의 deletedAt에 삭제 시간만 update하는 쿼리를 날립니다.
하드 삭제를 정말로 원하고 모델이 피해망상이라면 다음 force: true
옵션을 사용하여 강제로 삭제할 수 있습니다.
force: true 옵션 켜기!
await Post.destroy({
where: {
id: 1
},
force: true
});
// DELETE FROM "posts" WHERE "id" = 1
위의 예시는 정적 destroy
메소드를 예로 Post.destroy
들었지만( ), 인스턴스 메소드를 사용해도 모든 것이 동일하게 동작합니다.
const post = await Post.create({ title: 'test' });
console.log(post instanceof Post); // true
await post.destroy(); // Would just set the `deletedAt` flag
await post.destroy({ force: true }); // Would really delete the record
728x90
'웹 > Nodejs' 카테고리의 다른 글
✅ [Nodejs] Swagger를 express, Typescript에 적용하기 (0) | 2022.12.08 |
---|---|
✅ [NodeJs] sequelize에서 관계설정할 때 column 이름과 reference 이름을 달리해야 한다! (0) | 2022.11.30 |
✅ [NodeJs] Sequelize에서 서브쿼리를 써야할 때! (0) | 2022.11.23 |
[NodeJs] package.json에서 @types가 붙는 이유는? (0) | 2022.11.22 |
[NodeJs] node v14 -> v18로 넘어왔는데 app.use()에서 에러가 납니다. (0) | 2022.11.21 |