【问题标题】:Sequelize hooks (afterCreate. afterUpdate) in association (pivot, belongsToMany) not working关联(pivot,belongsToMany)中的续集挂钩(afterCreate.afterUpdate)不起作用
【发布时间】:2017-03-22 16:32:44
【问题描述】:

我正在构建一个使用 Sequelize 作为 ORM 的 API。我想在核心逻辑中加入一些“侦听器”,以检查某些值是否已更改并基于此触发一些逻辑。

我主要关心的一个问题是客户和用户之间的数据透视表。 (属于许多人)。该关系在数据透视表中有一些额外的字段,例如“is_admin”或“notify_user”。这描述了用户是某个客户的管理员,以及系统是否应通知该用户有关客户的操作。

我的 API 支持数据透视表数据的 PATCHING。现在我想做的是,如果 is_admin 值发生变化,启动一些其他逻辑以在其他地方更新 foo。

所有挂钩都适用于基础对象模型(用户和客户)。但是我的钩子都没有在枢轴对象模型上触发。

不确定 Sequelize 是否支持此功能。

提前致谢

我的关系是这样设置的:

private static setupCustomerRelations(sq: Sequelize.Sequelize) {

    const user = sq.models['User'] || new UserRepo().getNewInstance().getModel();
    const customer = sq.models['Customer'] || new CustomerRepo().getNewInstance().getModel();
    const customerUsers = sq.models['customer_users'] || new CustomerUsersRepo().getNewInstance().getModel()
    const machine = sq.models['Machine'] || new MachineRepo().getNewInstance().getModel()

    customer.belongsToMany(user, {'through': customerUsers});
    user.belongsToMany(customer, {'through': customerUsers});

    // Machines
    machine.belongsTo(customer, {'foreignKey':'customer_id'});
    customer.hasMany(machine, {'foreignKey':'customer_id'});
}

这个 customerUsers 是一个合适的模型

【问题讨论】:

  • 您的belongsToMany 关联是如何定义的?您的数据透视表是正确的模型还是只是在关联配置中定义为字符串?
  • 我将编辑上面的问题
  • 你能展示一个不起作用的钩子吗?

标签: orm associations hook sequelize.js


【解决方案1】:

我很幸运在连接表上使用了Bulk hooks。尝试在连接表的模型上使用 beforeBulkCreatebeforeBulkUpdate

CustomerUser.addHook('beforeBulkCreate', 'admin-only', async function(customerUsers) {
  for (const customerUser of customerUsers) {
    const user = await User.findById(customer);
    if (user.isAdmin) { /* ... */ }
  }
}

显然这会产生大量查询,您应该仔细考虑一下以及如何避免这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 2020-01-21
    • 2020-12-16
    • 1970-01-01
    • 2020-02-08
    相关资源
    最近更新 更多