У меня есть 2 модели: Департамент и Персонал, и они связаны через ассоциацию ownToMany.
Теперь мне нужно вызывать функцию всякий раз, когда вызывается staff.addDepartment.
Я пытаюсь использовать хуки, и в документации по сиквелизу говорится, что «При использовании функций добавления / установки будут работать хуки beforeUpdate / afterUpdate».
Но после некоторого времени, пытаясь заставить его работать, ловушка 'afterUpdate' все еще не вызывается, когда вызывается addDepartment
Модель персонала
module.exports = (sequelize, DataTypes) => {
const Staff = sequelize.define('Staff', {
workingLocation: {
type: DataTypes.STRING,
allowNull: true,
},
},
{
freezeTableName: true,
hooks: {
afterCreate: (instance, options) => {
console.log('\n\n\nSTAFF -> Hook associting staff to department: \n\n\n', staffDepartment);
},
beforeUpdate: (instance, options) => {
console.log('\n\n\n Before update model \n\n\n', staffDepartment);
},
afterUpdate: (instance, options) => {
console.log('\n\n\nAfter update model \n\n\n', staffDepartment);
},
},
}
);
Staff.associate = (models) => {
Staff.belongsTo(
models.Person,
{
foreignKey: {
allowNull: false,
},
onDelete: 'CASCADE',
}
);
Staff.belongsToMany(models.Department,
{
through: 'StaffDepartment',
onDelete: 'CASCADE',
onUpdate: 'CASCADE',
}
);
};
return Staff;
};
Модель отдела
module.exports = (sequelize, DataTypes) => {
const Department = sequelize.define('Department', {
name: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
},
acronym: {
type: DataTypes.STRING,
allowNull: true,
},
},
{
freezeTableName: true,
hooks: {
afterCreate: (staffDepartment, options) => {
console.log('\n\n\Department -> Hook associting staff to department: \n\n\n', staffDepartment);
},
beforeUpdate: (staffDepartment, options) => {
console.log('\n\n\n Department Before update model \n\n\n', staffDepartment);
},
afterUpdate: (staffDepartment, options) => {
console.log('\n\n\n Department After update model \n\n\n', staffDepartment);
},
},
}
);
Department.associate = (models) => {
Department.belongsToMany(models.Staff,
{
through: 'StaffDepartment',
onDelete: 'CASCADE',
onUpdate: 'CASCADE',
}
);
Department.hasMany(models.Course,
{
onDelete: 'CASCADE',
onUpdate: 'CASCADE',
}
);
};
return Department;
};
Код, который я хотел бы активировать после обновления на модели персонала
Staff.findById(staff.id).then((s) => {
s.addDepartment(departmentId);
});
Может кто-нибудь помочь?