How to create a TRIGGER in SEQUELIZE (nodeJS)?(如何在 SEQUELIZE (nodeJS) 中创建触发器?)
问题描述
我正在尝试使用 sequelize 创建触发器.主要思想是在创建 USER 后创建 CONFIG 的实例.
I'm trying to create a trigger using sequelize.. the main idea is to create an instance of CONFIG after creating a 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;
};
如你所见,一个用户"有一个配置",一个配置"属于一个用户",所以在创建用户后我想自动创建他的配置行.
As you can see, a "user" has one "config" and a "config" belongs to a "user", so after a user is created I want to create his config row automatically.
目标是做:
DELIMITER //
CREATE TRIGGER create_config AFTER INSERT ON user
  FOR EACH ROW
BEGIN
    insert into config    (user_id)     values(new.user_id);
END; //
DELIMITER ;
现在,我要做的模拟如下:
Now, what I do to simulate that is the following:
.then(function(user){
   return dao.Config.create(req.body, user, t);
})
创建用户后,我会像这样创建他的配置...它可以工作,但不是我要搜索的内容.
Once a User is created I create his configuration like that... it works but is not what I'm searching.
我该怎么做?
推荐答案
您可以通过以下两种方式之一来执行此操作.正如您所指出的,您可以在数据库本身中创建一个触发器.您可以运行原始的 sequelize 查询来完成此操作:
You can do this in one of two ways. As you noted, you could create a trigger in the database itself. You could run a raw sequelize query to accomplish this:
sequelize.query('CREATE TRIGGER create_config AFTER INSERT ON users' +
  ' FOR EACH ROW' +
  ' BEGIN' +
  ' insert into configs (UserId) values(new.id);' +
  'END;')
或者,您可以在执行的用户模型上创建 hookafterCreate 事件的操作:
Or, you could create a hook on the user model that performs an action on an afterCreate event:
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;
};
                        这篇关于如何在 SEQUELIZE (nodeJS) 中创建触发器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在 SEQUELIZE (nodeJS) 中创建触发器?
				
        
 
            
        - 在SQL中,如何为每个组选择前2行 2021-01-01
 - 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
 - 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
 - SQL 临时表问题 2022-01-01
 - 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
 - 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
 - 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
 - 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
 - 导入具有可变标题的 Excel 文件 2021-01-01
 - 更改自动增量起始编号? 2021-01-01
 
						
						
						
						
						
				
				
				
				