我在我的node.js项目中以偏执模式使用Sequelize.js,虽然软删除在查找和删除数据时按预期工作,但我无法找到取消删除软删除行的方法
我知道我可以按照docs
中的说明使用已删除的行Model.findAll({paranoid: false, where: {deletedAt: {ne: null}}})
但偏执:在updating时,虚假不可用。
在Sequelize中甚至可以取消删除软删除的行,还是我只是遗漏了什么?
答案 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);
在这种情况下,更新中不需要偏执选项。