2015-04-18 16 views
8

Sto cercando di creare un trigger usando sequelize .. l'idea principale è quella di creare un'istanza di CONFIG dopo aver creato un utente.Come creare un TRIGGER in SEQUELIZE (nodoJS)?

//USER MODEL 
module.exports = function(sequelize, DataTypes) {  
    var User = sequelize.define('User', { 
     name  : DataTypes.STRING(255), 
     email  : DataTypes.STRING(255), 
     username : DataTypes.STRING(45), 
     password : DataTypes.STRING(100), 
    }, { 
     classMethods : { 
      associate : function(models) { 
       User.hasOne(models.Config) 
      } 
     } 
    });  
    return User; 
}; 

//CONFIG MODEL 
module.exports = function(sequelize, DataTypes) { 
    var Config = sequelize.define('Config', { 
     notifications : DataTypes.INTEGER 
    }, { 
     classMethods : { 
      associate : function(models) { 
       Config.belongsTo(models.User) 
      } 
     } 
    }); 

    return Config; 
}; 

Come si può vedere, un "utente" ha un "config" e un "config" appartiene ad un "utente", quindi dopo la creazione di un utente che voglio creare automaticamente la sua fila di configurazione.

L'obiettivo è quello di fare:

DELIMITER // 
CREATE TRIGGER create_config AFTER INSERT ON user 
    FOR EACH ROW 
BEGIN 
    insert into config (user_id)  values(new.user_id); 
END; // 
DELIMITER ; 

Ora, quello che faccio per simulare che è la seguente:

.then(function(user){ 
    return dao.Config.create(req.body, user, t); 
}) 

Una volta che viene creato un utente a creare la sua configurazione come quella ... funziona ma non è quello che sto cercando.

Come lo farei?

Grazie!

risposta

15

È possibile eseguire questa operazione in due modi. Come si nota, è possibile creare un trigger nel database stesso. È possibile eseguire una query sequelize grezzo per raggiungere questo obiettivo:

sequelize.query('CREATE TRIGGER create_config AFTER INSERT ON users' + 
    ' FOR EACH ROW' + 
    ' BEGIN' + 
    ' insert into configs (UserId) values(new.id);' + 
    'END;') 

Oppure, si potrebbe creare un hook sul modello utente che esegue un'azione dopo un evento si verifica creare:

module.exports = function(sequelize, DataTypes) {  
    var User = sequelize.define('User', { 
    name  : DataTypes.STRING(255), 
    email  : DataTypes.STRING(255), 
    username : DataTypes.STRING(45), 
    password : DataTypes.STRING(100), 
    }, { 
    classMethods : { 
     associate : function(models) { 
     User.hasOne(models.Config) 
     } 
    }, 
    hooks: { 
     afterCreate: function(user, options) { 
     models.Config.create({ 
      UserId: user.id 
     }) 
     } 
    } 
    });  
    return User; 
}; 
Problemi correlati