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;
};
ご覧のとおり、「user」には「config」が1つあり、「config」は「user」に属しているため、ユーザーを作成した後、そのconfig行を自動的に作成します。
目標は次のことです。
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);
})
ユーザーが作成されたら、そのような構成を作成します...それは機能しますが、私が探しているものではありません。
どうすればいいですか?
これは、2つの方法のいずれかで実行できます。お気づきのように、データベース自体にトリガーを作成できます。これを実現するために、生の続編クエリを実行できます。
sequelize.query('CREATE TRIGGER create_config AFTER INSERT ON users' +
' FOR EACH ROW' +
' BEGIN' +
' insert into configs (UserId) values(new.id);' +
'END;')
または、afterCreate
イベントでアクションを実行するユーザーモデルに hook を作成することもできます。
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;
};