시퀄라이즈는 paranoid tables 컨셉을 지원.
paranoid table은 레코드를 삭제할 때 실제로 삭제하지 않고 deletedAt 컬럼에 timestamp 값을 넣는다. hard-deletion이 아닌 soft-deletion.
class Post extends Model {}
Post.init({ /* attributes here */ }, {
sequelize,
paranoid: true, // 이 옵션을 주면 된다
// 다른 이름으로 할 수도 있다
deletedAt: 'destroyTime'
});
await Post.destroy({
where: {
id: 1
}
});
// UPDATE "posts"
// SET "deletedAt"=[timestamp]
// WHERE "deletedAt" IS NULL AND "id" = 1
await Post.destroy({
where: {
id: 1
},
force: true
});
// DELETE FROM "posts" WHERE "id" = 1
// Example showing the instance `restore` method
// We create a post, soft-delete it and then restore it back
const post = await Post.create({ title: 'test' });
console.log(post instanceof Post); // true
await post.destroy();
console.log('soft-deleted!');
await post.restore();
console.log('restored!');
// Example showing the static `restore` method.
// Restoring every soft-deleted post with more than 100 likes
await Post.restore({
where: {
likes: {
[Op.gt]: 100
}
}
});
await Post.findByPk(123); // This will return `null` if the record of id 123 is soft-deleted
await Post.findByPk(123, { paranoid: false }); // This will retrieve the record
await Post.findAll({
where: { foo: 'bar' }
}); // This will not retrieve soft-deleted records
await Post.findAll({
where: { foo: 'bar' },
paranoid: false
}); // This will also retrieve soft-deleted records
paranoid:false
옵션을 주면 소프트 삭제된 레코드도 조회한다