ElT*_*ête 12 mysql triggers node.js sequelize.js
我正在尝试使用sequelize创建一个触发器..主要的想法是在创建一个CONFIG后创建一个实例USER.
// 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;
};
Run Code Online (Sandbox Code Playgroud)
如您所见,"用户"有一个"配置","配置"属于"用户",所以在创建用户后我想自动创建他的配置行.
目标是:
DELIMITER //
CREATE TRIGGER create_config AFTER INSERT ON user
FOR EACH ROW
BEGIN
insert into config (user_id) values(new.user_id);
END; //
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
现在,我要做的是模拟以下内容:
.then(function(user){
return dao.Config.create(req.body, user, t);
})
Run Code Online (Sandbox Code Playgroud)
一旦创建了用户,我就会创建他的配置...它可以工作,但不是我正在搜索的.
我该怎么办?
Eva*_*oky 28
您可以通过以下两种方式之一完成此操作.如您所述,您可以在数据库本身中创建一个触发器.您可以运行原始的sequelize查询来完成此任务:
sequelize.query('CREATE TRIGGER create_config AFTER INSERT ON users' +
' FOR EACH ROW' +
' BEGIN' +
' insert into configs (UserId) values(new.id);' +
'END;')
Run Code Online (Sandbox Code Playgroud)
或者,您可以在用户模型上创建一个对事件执行操作的挂钩afterCreate:
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;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9826 次 |
| 最近记录: |