如何在SEQUELIZE(nodeJS)中创build一个TRIGGER?

我试图创build一个触发器使用sequelize ..主要想法是创build一个用户后创build一个实例的CONFIG。

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

正如你所看到的,一个“用户”有一个“configuration”和一个“configuration”属于一个“用户”,所以在用户创build后,我想创build自己的configuration行。

目标是做到:

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

现在,我所做的是模拟如下:

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

一旦用户被创build,我创build他的configuration就像…它的工作,但不是我正在寻找。

我该怎么做?

谢谢!

你可以通过以下两种方法之一来完成 正如你所看到的,你可以在数据库本身创build一个触发器。 你可以运行一个原始的sequelize查询来完成这个:

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

或者,您可以在用户模型上创build一个挂钩 ,以在发生创build事件后执行操作:

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