web-dev-qa-db-ja.com

sequelize.jsの「paranoid」テーブルをクエリするときに、削除された要素を含める方法は?

被害妄想モードを使用して削除された(つまり、フィールドdeletedAtnullではなくなった)アプリケーション上の既存のユーザーが、同じメールを使用して再度登録できるようにしたいと考えています。したがって、APIは、以前に使用された電子メールでのユーザー作成に気づくと、新しいユーザーを作成する代わりに、以前に存在していたレジスターのnullフィールドをdeletedAtに設定します。

通常、私がやるユーザーを探すために、

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

ただし、作成されたSQLクエリを検査すると、次のものが含まれます。

Users.deletedAt IS NULL

偏執的なモデルを扱うときに見つける特別な方法はありますか?

21
alilloig

次のようにクエリを実行してください:

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

Sequelizeにはこの機能が組み込まれています。APIドキュメントに従って、find呼び出しのオプションに「paranoid」フラグを含めることができます。

例えば.

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

11
rudd

フックが使えます。

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

私の悪いコメントを申し訳ありません:(

2
Enxtur