如何在Sequelize.js中撤消软删除

时间:2014-11-12 13:44:21

标签: javascript node.js sequelize.js

我在我的node.js项目中以偏执模式使用Sequelize.js,虽然软删除在查找和删除数据时按预期工作,但我无法找到取消删除软删除行的方法

我知道我可以按照docs

中的说明使用已删除的行
Model.findAll({paranoid: false, where: {deletedAt: {ne: null}}})

但偏执:在updating时,虚假不可用。

在Sequelize中甚至可以取消删除软删除的行,还是我只是遗漏了什么?

4 个答案:

答案 0 :(得分:14)

您可以使用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]);
});

请注意,此代码段使用Sequelize @ v2

答案 1 :(得分:11)

使用{paranoid: false}选项获取对象,即。 var model = Model.findOne({ where: { something: 1 }, paranoid: false })然后将其恢复为model.restore() http://docs.sequelizejs.com/en/latest/api/instance/#restoreoptions-promiseundefined

答案 2 :(得分:2)

您可以使用paranoid: false 来做到这一点:

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

options.paranoid

     

如果为true,则仅更新未删除的记录。如果为假,则两者   删除和未删除的记录将被更新。仅适用于   options.paranoid对于模型为true。

更多详细信息: DO READ

  

我知道这个问题很老了,那时可能没有   解决方案

答案 3 :(得分:0)

我试图使用实例的更新方法而不是保存。这仅在更新数据中添加deletedAt值集null时才有效。

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

在这种情况下,更新中不需要偏执选项。