Sails/Waterline 中的软删除

5

尝试使用以下方式删除用户模型:

//Hard Delete    
User.destroy({id:userId}, function(err, res){  
  //Hard Delete
})  

我需要在用户模型上进行软删除,目前的方法是在删除时设置一个isDeleted标志为true并更新文档:

updateUser.isDeleted = true;
User.update({id:userId}, updateUser, function(err, res){
  Update project
})

在获取文档时,我正在进行一项检查,以确定是否已删除 - true或者不是。
Sails或Waterline提供了任何内置功能,可以配置执行软删除并避免基于isDeleted标志更新和获取吗?


你可以使用这个 pull request https://github.com/balderdashy/waterline/pull/525 来轻松实现它,如果他们将其实施。 - Meeker
2个回答

1
你可以使用 beforeFind() 生命周期函数来过滤软删除的记录。
模型:parrot.js
module.exports = {
    attributes: {
        // e.g., "Polly"
        name: {
            type: 'string'
        },

        // e.g., 3.26
        wingspan: {
            type: 'float',
            required: true
        },

        // e.g., "cm"
        wingspanUnits: {
            type: 'string',
            enum: ['cm', 'in', 'm', 'mm'],
            defaultsTo: 'cm'
        },

        // e.g., [{...}, {...}, ...]
        knownDialects: {
          collection: 'Dialect'
        },

        isDeleted:{
            type:'boolean'
        }
    },

    beforeFind: function(values, cb) {
        values.isDeleted = false;
        cb();
    }
}

ParrotController.js

module.exports = {

    // getting default parrots isDeleted = true
    list: function (req, res) {

        Parrot
        .find()
        .exec(function(err, parrots) {
            if(err) return res.send({ flag:false, data:[], message:"Error." });

            if(parrots && parrots.length){
                return res.send({ flag:true, data:parrots, message:"Success." });
            }
            else{
                return res.send({ flag:false, data:[], message:"Parrot list is empty." });
            }

        });

    }
};

这不是 sails 官方实现的,对吧?这是在 pull request 中添加的一个功能。 - Harald Hoerwick

0

Sails 框架中没有内置软删除功能,而且我怀疑也不会有。

这里有一个挑战:为什么不自己编写呢?Waterline 支持类方法!当然,您需要为每个模型编写或创建一个服务... 这可能更有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接