在 Sequelize 中使用 afterCreate 挂钩更新另一个 table

Using afterCreate hooks in Sequelize to update another table

编辑:Nvm,我明白了。应该是“sequelize.models.inventory.update”

我正在使用 Sequelize ORM 制作库存管理系统。我目前有两个 table“Inventory”和“IngoingInventory”(引申为“OutgoingInventory”)。 “Inventory”存储当前库存数量,“IngoingInventory”存储库存流入量。

每当“IngoingInventory”中添加新记录时,我想更新“Inventory”中的当前数量。我搜索了执行此操作的方法,发现每次将记录添加到“IngoingInventory”时,我都可以使用 Sequelize 挂钩来更新“Inventory”。但是,我无法使用它,因为它一直说它“无法读取未定义的 'update' 属性”。这是我的代码。

ingoing_inventory.model.js

module.exports = (sequelize, Sequelize) => {
const IngoingInventory = sequelize.define("ingoing_inventory", {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true,
    allowNull: false,
  },
  quantity: {
    type: Sequelize.INTEGER,
    allowNull: false,
    defaultValue: 0
  }
}, {
  freezeTableName: true,
  hooks: {
    afterCreate: function(ingoing_inventory) {
      sequelize.models.Inventory.update({ balance: sequelize.literal('balance + ingoing_inventory.quantity')}, {where: { id: ingoing_inventory.id }});
    }
  }
});

return IngoingInventory;};

inventory.model.js

module.exports = (sequelize, Sequelize) => {
const Inventory = sequelize.define("inventory", {
  inventory_code: {
    type: Sequelize.STRING,
    allowNull: false,
    unique: true
  },
  name: {
    type: Sequelize.STRING,
    allowNull: false,
    unique: true
  },
  unit: {
    type: Sequelize.STRING,
    allowNull: false
  },
  balance: {
    type: Sequelize.INTEGER,
    allowNull: false,
    defaultValue: 0
  }
}, {
  freezeTableName: true,
  paranoid: true
});

return Inventory;};

它们都在同一个 'models' 文件夹中。我试过更改导入“库存”的方式,甚至尝试增加而不是更新,但似乎没有任何效果。请帮忙,谢谢。

编辑: 通过 index.js

注册的模型
const dbConfig = require("../config/db.config.js");

const Sequelize = require("sequelize");
const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, {
  host: dbConfig.HOST,
  dialect: dbConfig.dialect,
  operatorsAliases: 0,

  pool: {
    max: dbConfig.pool.max,
    min: dbConfig.pool.min,
    acquire: dbConfig.pool.acquire,
    idle: dbConfig.pool.idle
  }
});

const db = {};

db.Sequelize = Sequelize;
db.sequelize = sequelize;

db.inventory = require("./inventory.model.js")(sequelize, Sequelize);
db.ingoing_form = require("./ingoing_form.model.js")(sequelize, Sequelize);
db.ingoing_inventory = require("./ingoing_inventory.model.js")(sequelize, Sequelize);

db.inventory.belongsToMany(db.ingoing_form, {through: db.ingoing_inventory});
db.ingoing_form.belongsToMany(db.inventory, {through: db.ingoing_inventory});

db.inventory.hasMany(db.ingoing_inventory);
db.ingoing_inventory.belongsTo(db.inventory);

db.ingoing_form.hasMany(db.ingoing_inventory, {as: "ingoing_inventory"});
db.ingoing_inventory.belongsTo(db.ingoing_form);


module.exports = db;

您将 Inventory 模型注册为 inventory,但在 afterCreate 挂钩中您试图以 Inventory:

访问它
sequelize.define("inventory"
...
db.inventory = require("./inventory.model.js")(sequelize, Sequelize);
sequelize.models.Inventory.update