Sequelize.js Sequelize AfterHook赢得';当对多对多关联使用set或add mixin时,不能调用

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

我正在使用sequelize verion()来保持对表的更新,它使用afterHook来保持创建、更新、销毁等的跟踪。它适用于普通表。然而,它似乎对关系表不起作用

我创建模型和多对多关系,如下所示

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上,就像您描述的那样。如果这对你有效,我可以发布一个答案。