在 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
编辑: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