Sequelize.js 是否可以获取插入的行';在sequelize中使用钩子的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

我想为每个订单生成唯一的订单号。我正在尝试将创建的订单id嵌套在订单号内
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在文档中找到了一个方法,该方法也可以启用事务。“关于交易的说明”抱歉,伙计们,我的错。我没有在模型中设置订单号。