如何在 SEQUELIZE (nodeJS) 中创建触发器?

How to create a TRIGGER in SEQUELIZE (nodeJS)?

我正在尝试使用 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;
};

如你所见,一个"user"有一个"config",一个"config"属于一个"user",所以创建用户后我想创建他的自动配置行。

目标是做:

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

创建用户后,我会像这样创建他的配置...它有效但不是我正在搜索的内容。

我该怎么做?

您可以通过以下两种方式之一完成此操作。如您所述,您可以在数据库本身中创建触发器。您可以 运行 一个原始的 sequelize 查询来完成这个:

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

你这样在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;')