在sequelize.js上查询“偏执狂”表时如何包含已删除的元素?

时间:2014-07-07 13:30:42

标签: javascript sequelize.js

我希望我的应用程序中以前存在的用户已使用偏执模式删除(现在其字段deletedAt不是null),以便能够使用相同的电子邮件再次注册。因此,当API通过之前使用过的电子邮件注意到用户创建时,它会将先前存在的寄存器的null字段设置为deletedAt,而不是创建新用户。

通常为了寻找我会做的用户,

User.find( { where: { email: req.body.user.email } })

但是在检查创建的SQL查询时,它包括

Users.deletedAt IS NULL

在处理偏执模型时是否有任何特殊的寻找方式?

3 个答案:

答案 0 :(得分:30)

只需运行您的查询:

User.find({
  where: {email: req.body.user.email}, 
  paranoid: false
})

答案 1 :(得分:9)

Sequelize内置了此功能。根据他们的API文档,您可以包含“偏执狂”。在查找电话的选项中标记。

e.g。

User.find({where: {email: req.body.user.email}}, {paranoid: false}).success(models) {
    //models contains both deleted and non-deleted users
}

参考:http://docs.sequelizejs.com/en/latest/api/model/#findalloptions-promisearrayinstance

答案 2 :(得分:2)

你可以使用钩子。

var uuid = require('node-uuid')
module.exports = function (sequelize, DataTypes) {
    return sequelize.define("multi_route", {
        email: {
            type: DataTypes.STRING,
            unique: false,
        }
        //other fields
    }, {
        timestamps: true,
        paranoid: true,
        hooks: {
            beforeUpdate: function (multiFare, next) {                  // berforeUpdate will called after beforeDestroy
                if (multiFare.email.indexOf("_____destroyed") > -1) {   // check contains '_____destroyed' string
                    multiFare.email = multiFare.email + uuid.v1()       // set unique value
                }
                next()
            },
            beforeDestroy: [function (multiFare, next) {                // beforeDestroy will called before one instance destroyed
                multiFare.email = multiFare.email + '_____destroyed'    // flag this will destroy
                next()
            }]
        }
    })
}

对不起我的不好评论:(