2015-04-18 46 views
8

Dizilimi kullanarak bir tetikleyici oluşturmaya çalışıyorum .. ana fikir, bir KULLANICI oluşturduktan sonra CONFIG örneğini oluşturmaktır. Bir kullanıcı oluşturulduktan sonra otomatik olarak onun yapılandırma satırı oluşturmak istiyorum böylece SEQUELIZE (nodeJS) içinde nasıl bir TRIGGER oluşturuluyor?

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

Gördüğünüz gibi

, bir "kullanıcı", bir "yapılandırma" ve "kullanıcı" için bir "yapılandırma" aittir vardır.

gol yapmaktır: Aşağıdaki yani simüle etmek ne Şimdi

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

: Bir Kullanıcı böyle onun yapılandırması oluşturmak oluşturulur

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

kez ... çalışır ama aradığım şey değil.

Nasıl yaparım?

Teşekkür ederiz!

cevap

15

Bunu iki yoldan yapabilirsiniz. Dikkat ettiğin gibi, veritabanında bir tetikleyici oluşturabilirsiniz. Bunu gerçekleştirmek için bir ham sequelize sorgusu çalıştırabilir: Bir oluşturmak olaydan sonra bir eylem gerçekleştirdiğinde kullanıcı modeline bir hook yaratabilir,

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

Veya oluşur:

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