2014-11-12 5 views
6

Ich benutze Sequelize.js im paranoiden Modus in meinem Projekt node.js und während das Löschen funktioniert wie erwartet beim Suchen und Löschen von Daten, habe ich Probleme, einen Weg zu finden gelöschte Zeilen wiederherstellen.So machen Sie das Löschen in Sequelize.js rückgängig

Ich weiß, ich kann Zeilen, indem in der docs

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

aber paranoid gelöscht, wie erklärt: false nicht verfügbar ist, wenn updating.

Ist das Rückgängigmachen gelöschter Zeilen in Sequelize sogar möglich oder fehle ich gerade etwas?

Antwort

10

können Sie instance.setDataValue('deletedAt', null) verwenden:

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]); 
}); 

Bitte beachten Sie, dass dieser Ausschnitt Sequelize @ v2

+0

danke! das hat perfekt funktioniert! – teemup

0

Ich habe versucht, die Update-Methode der Instanz zu verwenden, anstatt zu speichern. Dies funktionierte nur, wenn der deletedAt Wertsatz null ebenfalls in den Aktualisierungsdaten hinzugefügt wurde.

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

In diesem Fall ist die paranoide Option im Update nicht erforderlich.