2014-11-12 14 views
6

Tôi đang sử dụng Sequelize.js ở chế độ hoang tưởng trong dự án node.js của tôi và trong khi thao tác xóa mềm hoạt động như mong đợi trong việc tìm và xóa dữ liệu, tôi gặp sự cố khi tìm cách để phục hồi các hàng đã xóa mềm.Cách hoàn tác xóa mềm trong Sequelize.js

Tôi biết tôi có thể nhận được hàng xóa bởi bằng cách sử dụng giải thích như trong docs

Model.findAll({paranoid: false, where: {deletedAt: {ne: null}}}) 

nhưng hoang tưởng: false là không có sẵn khi updating.

Đang phục hồi các hàng bị xóa mềm ngay cả khi có thể trong phần Tiếp theo hoặc tôi chỉ thiếu một cái gì đó?

Trả lời

10

Bạn có thể sử dụng instance.setDataValue('deletedAt', null):

var Bluebird = require('bluebird'); 
var models = require('./models'); 

models.sequelize.sync({ force: true }) 
.then(function() { 
    return models.User.create({ name: 'user' }) 
}) 
.then(function (user) { 
    return user.destroy() 
}) 
.then(function() { 
    return models.sequelize.models.User.findAll({ paranoid: false }); 
}) 
.then(function (users) { 
    var user = users[0]; 
    user.setDataValue('deletedAt', null); 
    return user.save({ paranoid: false }); 
}).then(function() { 
    return models.sequelize.models.User.findAll(); 
}).then(function (users) { 
    console.log(users[0]); 
}); 

Xin lưu ý rằng đoạn mã này sử dụng Sequelize @ v2

+0

cảm ơn! điều này làm việc hoàn hảo! – teemup

0

Tôi đã cố sử dụng phương pháp cập nhật của cá thể thay vì lưu. Điều này chỉ hoạt động khi thêm giá trị deletedAt đặt null trong dữ liệu cập nhật.

user.setDataValue('deletedAt', null); 
user.update({deletedAt:null}, callback); 

Trong trường hợp này, tùy chọn hoang tưởng là không cần thiết trong bản cập nhật.