2015-04-18 19 views
8

Próbuję utworzyć spust przy użyciu sequelize .. głównym celem jest utworzenie wystąpienia CONFIG po utworzeniu UŻYTKOWNIKA.Jak utworzyć TRIGGER w SEQUELIZE (nodeJS)?

//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; 
}; 

Jak widać, „user” ma jeden „config” i „config” należy do „user”, więc gdy użytkownik jest tworzony Chcę automatycznie tworzyć swój config wiersz.

Celem jest do zrobienia:

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

Teraz, co zrobić, aby symulować, że jest następujący:

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

Gdy użytkownik jest tworzony tworzę swoją konfigurację takiego ... działa, ale nie jest tym, czego szukam.

Jak bym to zrobił?

Dziękujemy!

Odpowiedz

15

Możesz to zrobić na jeden z dwóch sposobów. Jak można zauważyć, można utworzyć wyzwalacz w samej bazie danych. Można uruchomić surowego zapytanie sequelize do wykonania tego:

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

Lub można utworzyć hook modelu użytkownika, który wykonuje czynność po zdarzeniu stworzenia występuje:

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; 
};