被害妄想モードを使用して削除された(つまり、フィールドdeletedAt
がnull
ではなくなった)アプリケーション上の既存のユーザーが、同じメールを使用して再度登録できるようにしたいと考えています。したがって、APIは、以前に使用された電子メールでのユーザー作成に気づくと、新しいユーザーを作成する代わりに、以前に存在していたレジスターのnull
フィールドをdeletedAt
に設定します。
通常、私がやるユーザーを探すために、
User.find( { where: { email: req.body.user.email } })
ただし、作成されたSQLクエリを検査すると、次のものが含まれます。
Users.deletedAt IS NULL
偏執的なモデルを扱うときに見つける特別な方法はありますか?
次のようにクエリを実行してください:
User.find({
where: {email: req.body.user.email},
paranoid: false
})
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
フックが使えます。
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()
}]
}
})
}
私の悪いコメントを申し訳ありません:(