gpt4 book ai didi

sequelize.js - Sequelize - 在具有 onDelete 级联的实例上调用 beforeDestroy Hook

转载 作者:行者123 更新时间:2023-12-03 22:16:55 24 4
gpt4 key购买 nike

我有一个涉及两个表(一对多)的场景,其中用户可以从第一个表(名称:文档,关系:一个)中删除记录或记录数组,然后删除关联的记录从我的第二个表(名称:文件,关系:许多)到该表将被删除。 "file"表上的 onDelete 级联正常工作,但我的 Hook 从未触发。

  • 我是否需要在我的 .destroy sequelize 中的某处调用钩子(Hook)方法?
  • 因为我的关系是一对多的,一个用户可以有多个文件或一个文档的单个文件,我是否需要添加 Hook beforeDestroybeforeBulkDestroy 都可以吗?

下面是两个表之间的关联:

文档

var Document = sequelize.define('document', {
...
},
{
underscored: true,
freezeTableName: true,
classMethods: {
associate: function(db) {
Document.hasMany(db.File, { foreignKey: 'document_id'}),
}
}
});
return Document;

文件

var File = sequelize.define('file', {
...
},{
underscored: true,
freezeTableName: true,
hooks: {
beforeDestroy: function(whereClause, fn){
//options.individualHooks = true;
console.log('whereClause Start');
console.log(whereClause);
console.log('fn start');
console.log(fn);
},
beforeBulkDestroy: function(whereClause, fn) {
//options.individualHooks = true;
console.log('whereClause Start');
console.log(whereClause);
console.log('fn start');
console.log(fn);
}
},
classMethods: {
associate: function(db) {
File.belongsTo(db.Document, { onDelete: 'CASCADE', hooks: true});
}
}
});
return File;

仅Sequelize触发场景:

models.Document.destroy({
where: {
userId: req.user.userId,
documentId: documentId //Replace with array in certain instances
}
});

最佳答案

我遇到了同样的问题。因为文档(v5):

Note: You can't use hooks with instances. Hooks are used with models.

Instance Hooks: The following hooks will emit whenever you're editing a single object

鉴于非常复杂的观点,我决定不通过实例 models.Document.destroy(where) 销毁,而是通过模型(选择模型,然后选择 document.destroy() ).这样做时会触发钩子(Hook)。

当您现在使用 cascades 时,似乎 Sequelize (v5) 无法调用钩子(Hook)。

关于sequelize.js - Sequelize - 在具有 onDelete 级联的实例上调用 beforeDestroy Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44824293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com