Sequelize.js Sequelize AfterHook赢得';当对多对多关联使用set或add mixin时,不能调用
我正在使用sequelize verion()来保持对表的更新,它使用afterHook来保持创建、更新、销毁等的跟踪。它适用于普通表。然而,它似乎对关系表不起作用 我创建模型和多对多关系,如下所示Sequelize.js Sequelize AfterHook赢得';当对多对多关联使用set或add mixin时,不能调用,sequelize.js,version,hook,audit,Sequelize.js,Version,Hook,Audit,我正在使用sequelize verion()来保持对表的更新,它使用afterHook来保持创建、更新、销毁等的跟踪。它适用于普通表。然而,它似乎对关系表不起作用 我创建模型和多对多关系,如下所示 const ModelA = sequelize.define('tableA', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, dataA: { type: Sequelize.STRI
const ModelA = sequelize.define('tableA', {
id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true },
dataA: { type: Sequelize.STRING, allowNull: false },
});
const ModelB = sequelize.define('tableB', {
id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true },
dataB: { type: Sequelize.STRING, allowNull: false },
});
const ModalAModalB = sequelize.define('tableA_B', {
id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true },
modelAId: { type: Sequelize.INTEGER, allowNull: false },
modelBId: { type: Sequelize.INTEGER, allowNull: false },
});
const relationshipAB = ModelA.belongsToMany(ModelB, {
through: 'tableA_B',
foreignKey: 'modelAId',
as: 'childrendB',
});
ModalAModalB.belongsTo(ModelA, {
foreignKey: 'modelAId',
});
ModalAModalB.belongsTo(ModelB, {
foreignKey: 'modelBId',
});
const ModelAVersion = new Version(ModelA);
const ModalAModalBVersion = new Version(ModalAModalB);
await ModelA.sequelize.transaction(async () => {
modelAdded = await ModelA.create({ ...newModelA });
const modelBs = await ModelB.findAll({ where: { id: { [Op.in]: modelAChildrendBIds } } });
await modelAdded.addChildrendB(modelBs);
});
我尝试通过以下方式创建新的modelA
const ModelA = sequelize.define('tableA', {
id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true },
dataA: { type: Sequelize.STRING, allowNull: false },
});
const ModelB = sequelize.define('tableB', {
id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true },
dataB: { type: Sequelize.STRING, allowNull: false },
});
const ModalAModalB = sequelize.define('tableA_B', {
id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true },
modelAId: { type: Sequelize.INTEGER, allowNull: false },
modelBId: { type: Sequelize.INTEGER, allowNull: false },
});
const relationshipAB = ModelA.belongsToMany(ModelB, {
through: 'tableA_B',
foreignKey: 'modelAId',
as: 'childrendB',
});
ModalAModalB.belongsTo(ModelA, {
foreignKey: 'modelAId',
});
ModalAModalB.belongsTo(ModelB, {
foreignKey: 'modelBId',
});
const ModelAVersion = new Version(ModelA);
const ModalAModalBVersion = new Version(ModalAModalB);
await ModelA.sequelize.transaction(async () => {
modelAdded = await ModelA.create({ ...newModelA });
const modelBs = await ModelB.findAll({ where: { id: { [Op.in]: modelAChildrendBIds } } });
await modelAdded.addChildrendB(modelBs);
});
但是,ModelAVersion可以记录新条目,但不能记录ModAlaModalVersion表
我试图通过individualHooks选项,但仍然不起作用
await modelAdded.addChildrendB(modelBs, { individualHooks: true });
我也尝试过如下的钩子选项,它也不起作用
const relationshipAB = ModelA.belongsToMany(ModelB, {
through: 'tableA_B',
foreignKey: 'modelAId',
as: 'childrendB',
hooks: true,
});
然而,以下工作以及ModelAVersion和ModalAModalBVersion都得到了更新
await modelBs.bulkCreate(
modelBs.map((o) => ({
modelBId: o.id,
modelAId: modelAdded.id,
})),
);
当通过set或add方法更新多对多关联时,如何让sequalize触发关系表的麻烦
备注:中描述了我下面介绍的mixIn方法。我发现当
hooks:true
作为选项添加到每个belongTomany
关系中时,钩子会触发。确保两侧都添加了hooks:true
individualHooks:true
应该存在于您的add/delete mixin上,就像您描述的那样。如果这对你有效,我可以发布一个答案。