Sequelize - 如何在模型中定义触发器?
Sequelize - how to define a trigger in a model?
我目前正在 RDS Aurora DB 上使用 sequelize,我需要跟踪删除了 table 的哪些记录 - 为此,我创建了一个新的 table dbLog。现在我需要向数据库添加一个触发器,每当 table t1 中的记录被删除时,它会将记录的 ID 保存到 dbLog table 中。基本上,我需要涵盖已部署数据库和尚不存在的数据库的两种情况。
- 数据库已经存在。这很容易,因为我可以像这样通过原始查询创建触发器
CREATE TRIGGER trigger AFTER DELETE ON t1 FOR EACH ROW
INSERT INTO dbLog ( id, tableName, status, updatedAt )
VALUES (OLD.id, 't1', 'D', NOW())`
- 数据库不存在。这是有问题的,因为它是通过启动模型然后 sequelize.sync() 创建的。所以我不能只调用原始查询,相反,我需要在模型中为 t1 table 定义此触发器。这就是我启动 table(简体)
的方式
t1.init(
{
id: {
type: new DataTypes.BIGINT,
autoIncrement: true,
primaryKey: true
},
name: {
type: new DataTypes.STRING,
allowNull: false
}
},
{
sequelize,
tableName: 't1',
}
);
问题是我不知道如何创建触发器。我尝试将类似的内容放入 t1.Init 的属性部分。但是有一些问题,当我检查数据库中的触发器时,创建了 none。我该如何解决?甚至以这种方式创建的触发器 1:1 是否等同于原始查询创建的触发器?非常感谢。
hooks: {
afterDestroy: function(t1) {
DbLog.create({
id: t1.id,
tableName: 't1',
status: 'D',
updatedAt: '2015-10-02'
})
}
}
您应该通过执行原始 SQL 查询在数据库中手动创建触发器。如果您正在使用迁移,那么只需创建一个带有触发器创建的迁移(也是一个原始 SQL 查询)。
我目前正在 RDS Aurora DB 上使用 sequelize,我需要跟踪删除了 table 的哪些记录 - 为此,我创建了一个新的 table dbLog。现在我需要向数据库添加一个触发器,每当 table t1 中的记录被删除时,它会将记录的 ID 保存到 dbLog table 中。基本上,我需要涵盖已部署数据库和尚不存在的数据库的两种情况。
- 数据库已经存在。这很容易,因为我可以像这样通过原始查询创建触发器
CREATE TRIGGER trigger AFTER DELETE ON t1 FOR EACH ROW
INSERT INTO dbLog ( id, tableName, status, updatedAt )
VALUES (OLD.id, 't1', 'D', NOW())`
- 数据库不存在。这是有问题的,因为它是通过启动模型然后 sequelize.sync() 创建的。所以我不能只调用原始查询,相反,我需要在模型中为 t1 table 定义此触发器。这就是我启动 table(简体) 的方式
t1.init(
{
id: {
type: new DataTypes.BIGINT,
autoIncrement: true,
primaryKey: true
},
name: {
type: new DataTypes.STRING,
allowNull: false
}
},
{
sequelize,
tableName: 't1',
}
);
问题是我不知道如何创建触发器。我尝试将类似的内容放入 t1.Init 的属性部分。但是有一些问题,当我检查数据库中的触发器时,创建了 none。我该如何解决?甚至以这种方式创建的触发器 1:1 是否等同于原始查询创建的触发器?非常感谢。
hooks: {
afterDestroy: function(t1) {
DbLog.create({
id: t1.id,
tableName: 't1',
status: 'D',
updatedAt: '2015-10-02'
})
}
}
您应该通过执行原始 SQL 查询在数据库中手动创建触发器。如果您正在使用迁移,那么只需创建一个带有触发器创建的迁移(也是一个原始 SQL 查询)。