Sequelize:在同一事务中更新和选择

问题描述

我有PO的一对多关联-> podetail PO 有一个状态栏。 PO Detail 有 orderQty 和fulfiledQty。 要求是:每当 PO Detail fulFilledQty 更新时,应检查该 PO 是否有任何未履行的行项目,并标记为未履行或未履行。

示例: PO - Id: 1,status = Unfulfilled podetail = [ {id: 1,orderQty: 10,fulfilledQty : 6},{id:2,orderQty:4,fulfilledQty: 4}

如果我在 id = 1 的 podetail 中将 fullfulQty 更新为 10,我应该将 PO = 1 的状态更改为 Fulfilled。

我尝试过同样的续集。

var updatedPOLine = await models.sequelize.query(updateFulfilledQtysql,{
      type: models.sequelize.Sequelize.QueryTypes.UPDATE,transaction: tx,returning: true,});

var result = await models.PurchaSEOrder.findByPk(unFulfilledOrder.poId,{
      include: [
        {
          model: models.podetail,as: "lineItems",where: {
            fulfilledQty: {
              [Op.or]: [
                {
                  [Op.eq]: null,},{
                  [Op.lt]: models.sequelize.col("orderQty"),],});
    console.log("Result : " + JSON.stringify(result));

结果在更新前生成了带有 PO Detail 的 PO。它不反映采购订单详细信息的更新值。请注意,我正在传递相同的交易。隔离级别设置为 SERIALIZABLE。我什至尝试了 READ_COMMITTED,但没有按预期工作。

有什么帮助吗?

更新:

我忘记在上面的 transaction:tx 方法中包含 models.PurchaSEOrder.findByPk,因此它没有读取上一步中更新的行。错失良机。

现在添加该行后它按预期工作。

var result = await models.PurchaSEOrder.findByPk(unFulfilledOrder.poId,**transaction:tx**
    });

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)