【问题标题】:How to include the deleted elements when querying a "paranoid" table on sequelize.js?在 sequelize.js 上查询“偏执”表时如何包含已删除的元素?
【发布时间】:2014-08-28 00:07:56
【问题描述】:

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

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

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

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

Users.deletedAt IS NULL

在处理偏执模型时有什么特殊的查找方法吗?

【问题讨论】:

    标签: javascript sequelize.js


    【解决方案1】:

    Sequelize 内置了此功能。根据他们的 API 文档,您可以在 find 调用的选项中包含“偏执狂”标志。

    例如

    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

    【讨论】:

    • 也可以查询没有被销毁的数据。续集版本是 5.8.5
    【解决方案2】:

    只需像这样运行您的查询:

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

    【讨论】:

      【解决方案3】:

      你可以使用钩子。

      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()
                  }]
              }
          })
      }
      

      对不起,我的坏习惯:(

      【讨论】:

        猜你喜欢
        • 2012-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-14
        相关资源
        最近更新 更多