如何在 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;')
我正在尝试使用 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;')