2014-07-07 19 views
13

Desidero che gli utenti precedentemente esistenti sulla mia applicazione, che sono stati eliminati utilizzando la modalità paranoico (quindi ora il suo campo deletedAt NON è null), per poter registrare nuovamente utilizzando la stessa e-mail. Pertanto, quando l'API rileva la creazione di un utente con un'email precedentemente utilizzata, imposta su null il campo deletedAt del registro precedentemente esistente anziché creare un nuovo utente.Come includere gli elementi eliminati quando si esegue una query su una tabella "paranoico" su sequelize.js?

Di solito per la ricerca di un utente che farò,

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

Ma previo controllo della query SQL creato, include

Users.deletedAt IS NULL

C'è un modo speciale di trovare quando si tratta di modelli paranoici?

risposta

3

È possibile utilizzare il gancio.

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

Ci dispiace per il mio cattivo commenti :(

5

Sequelize ha questa funzione incorporata. Per loro documentazione API, è possibile includere il flag 'paranoico' nelle opzioni di chiamata find.

ad esempio

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

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

+0

Qualcosa è sbagliato con quel collegamento – d512

+1

@ user1334007 fisse – rudd

+0

ora funziona, grazie – d512

15

Basta eseguire la query l ike questo:

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