繁体   English   中英

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

[英]How to undo soft delete in Sequelize.js

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

我知道我可以按照文档中的说明使用已删除的行

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

但偏执: 更新时无法使用false。

是否可以在Sequelize中取消删除软删除的行,或者我只是遗漏了什么?

您可以使用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

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

你可以通过使用paranoid: false来做到这一点

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

options.paranoid

如果为true,则仅更新未删除的记录。 如果为false,则将更新已删除和未删除的记录。 仅当options.paranoid对于模型为true时才适用。

有关更多详细信息:请阅读

我知道问题很严重,当时可能没有解决方案

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM