Sequelize.js 是否可以获取插入的行';在sequelize中使用钩子的ID?
我想为每个订单生成唯一的订单号。我正在尝试将创建的订单id嵌套在订单号内Sequelize.js 是否可以获取插入的行';在sequelize中使用钩子的ID?,sequelize.js,Sequelize.js,我想为每个订单生成唯一的订单号。我正在尝试将创建的订单id嵌套在订单号内 sequelize中有中描述的挂钩。 可以使用这些挂钩中的任何一个吗? 我使用beforeCreate()和beforeUpdate()在保存之前对密码进行哈希运算。 'use strict'; module.exports = (sequelize, DataTypes) => { const Order = sequelize.define('Order', { buyer_id: DataTypes
sequelize中有中描述的挂钩。
可以使用这些挂钩中的任何一个吗? 我使用
beforeCreate()
和beforeUpdate()
在保存之前对密码进行哈希运算。'use strict';
module.exports = (sequelize, DataTypes) => {
const Order = sequelize.define('Order', {
buyer_id: DataTypes.INTEGER.UNSIGNED,
order_status_code: DataTypes.TINYINT.UNSIGNED,
order_detail: DataTypes.TEXT,
order_date: DataTypes.DATE
}, {
hooks: {
beforeSave: function(order, options) {
order.order_number = order.order_id + "UNIQUE"
}
}
});
Order.associate = function(models) {
// associations can be defined here
Order.hasOne(models.OrderItem,{foreignKey: "order_id"})
};
return Order;
};
更新我试过下面的方法,但不起作用。挂钩正在运行,但未更新行
module.exports = (sequelize, DataTypes) => {
const Order = sequelize.define('Order', {
buyer_id: DataTypes.INTEGER.UNSIGNED,
order_status_code: DataTypes.TINYINT.UNSIGNED,
order_detail: DataTypes.TEXT,
order_date: DataTypes.DATE
}, {
hooks:{
afterCreate: function(order, options) {
order.update({
order_number : 'OD' + Date.now + order.id + order.OrderItem.product_id + order.buyer_id
})
}
}
});
Order.associate = function(models) {
// associations can be defined here
Order.hasOne(models.OrderItem,{foreignKey: "order_id"})
};
return Order;
};
我尝试了下面的方法,发现了很多可以在模型定义中完成的事情
'use strict';
module.exports = (sequelize, DataTypes) => {
const Order = sequelize.define('Order', {
buyer_id: DataTypes.INTEGER.UNSIGNED,
order_status_code: DataTypes.TINYINT.UNSIGNED,
order_detail: DataTypes.TEXT,
order_date: DataTypes.DATE,
order_number: DataTypes.STRING(20)
}, {
hooks:{
afterCreate: async function(order, options) {
await order.update(
{
order_number : 'OD' + Date.now() + order.id + order.OrderItem.product_id + order.buyer_id
},
{
transaction: options.transaction
})
}
}
});
Order.associate = function(models) {
// associations can be defined here
Order.hasOne(models.OrderItem,{foreignKey: "order_id"})
};
return Order;
};
因此,当用户创建订单时。我使用事务在两个表中插入数据。这就是为什么我可以在钩子中访问order.OrderItem.product\u id
。但是,如果您想访问任何其他模型,您可以始终使用
sequelize.models.YourModel
我正在使用
async
和await
,因为我还希望在响应中使用订单号。我通过在钩子中传递事务来实现这一点
如果有人找到更好的方法,请提出建议。您必须使用afterCreate(),这样才能获得id,然后更新orderId。所以我必须更新钩子中创建的行?是的。在afterCreate()中,您将收到该行,您可以对其进行更新,并确保您现在正在为此使用afterUpdate(),它将永远保持更新:PI在文档中找到了一个方法,该方法也可以启用事务。“关于交易的说明”抱歉,伙计们,我的错。我没有在模型中设置订单号。