Sequelize AfterHook не будет вызывать при использовании set или add mixin для ассоциации многие-ко-многим - PullRequest
0 голосов
/ 13 февраля 2020

Я использую sequelize-verion (https://www.npmjs.com/package/sequelize-version) для хранения обновлений в нашей таблице, он использует afterHook для отслеживания создания, обновления, уничтожения и т. Д. c. Это работает для нормального стола. Однако, похоже, что это не сработает для таблицы отношений.

Я создаю модель и отношение «многие ко многим» следующим образом.

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);

Я пытаюсь создать новую модель A с помощью следующее.

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 может регистрировать новую запись, но не таблицу ModalAModalBVersion,

Я пытаюсь передать параметр 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,
    })),
  );

Любая идея, как заставить sequalize вызывать aferHook для таблицы отношений, когда обновляется ассоциация "многие ко многим" через методы set или add?

Примечание: описываются методы mixIn, которые я следую в https://sequelize.org/master/class/lib/associations/base.js~Association.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...