如何在 SEQUELIZE (nodeJS) 中创建触发器?
Posted
技术标签:
【中文标题】如何在 SEQUELIZE (nodeJS) 中创建触发器?【英文标题】:How to create a TRIGGER in SEQUELIZE (nodeJS)? 【发布时间】:2015-06-25 07:36:12 【问题描述】:我正在尝试使用 sequelize 创建触发器。主要思想是在创建 USER
之后创建 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;
;
如你所见,一个“用户”有一个“配置”,一个“配置”属于一个“用户”,所以在创建用户后我想自动创建他的配置行。
目标是做:
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);
)
创建用户后,我会像这样创建他的配置...它可以工作,但不是我要搜索的内容。
我该怎么做?
【问题讨论】:
【参考方案1】:您可以像这样在 Sequelize 中添加触发器。 [正如@Evan Siroky 提到的,我只是添加了更多步骤以获取更多详细信息]
import Sequelize from "sequelize";
const sequelize = new Sequelize( host: "localhost",
port: 3306,
dialect: "mysql",
username: "your user name",
password: "your password",
database: "dbname",
logging: false,);
sequelize.query('CREATE TRIGGER create_config AFTER INSERT ON users' +
' FOR EACH ROW' +
' BEGIN' +
' insert into configs (UserId) values(new.id);' +
'END;')
【讨论】:
【参考方案2】:您可以通过以下两种方式之一来执行此操作。正如您所指出的,您可以在数据库本身中创建一个触发器。您可以运行原始的 sequelize 查询来完成此操作:
sequelize.query('CREATE TRIGGER create_config AFTER INSERT ON users' +
' FOR EACH ROW' +
' BEGIN' +
' insert into configs (UserId) values(new.id);' +
'END;')
或者,您可以在用户模型上创建一个hook,以对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;
;
【讨论】:
非常好,也适用于 mysqljs。您可以直接执行CREATE TRIGGER ...
,而无需尝试更改示例中最常见的分隔符。以上是关于如何在 SEQUELIZE (nodeJS) 中创建触发器?的主要内容,如果未能解决你的问题,请参考以下文章