Я использую 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.