如何顺序更新多行

时间:2019-11-28 04:18:56

标签: mysql node.js sql-update sequelize.js sequelize-cli

我正在尝试使用Sequelize更新多行。但是,这会给我Error。

SequelizeValidationError","errors":
    [{"message":"id cannot be an array or an object",
        "type":"string violation",
        "path":"id",
        "value":["ord-307486d0-10cb-11ea-8174-9b8214c20c49","ord-ef0f0a80-10ca-11ea-8174-9b8214c20c49"],
        "origin":"CORE",
        "instance":{"id":["ord-307486d0-10cb-11ea-8174-9b8214c20c49","ord-ef0f0a80-10ca-11ea-8174-9b8214c20c49"],
        "status":"PAID",
        "updatedAt":"2019-11-28T03:47:38.057Z"},
        "validatorKey":"not_a_string",
        "validatorName":null,
        "validatorArgs":[]}]},
    "isUpdated":false

您能帮我弄清楚吗?我该怎么办?

这是我的代码:

updateOrder: (orderData, vendorId, callback) => {

  models.Orders.update(orderData, {
      where: {
        id: orderData.id
      }
    })
    .then((result) => {

      if (result != '0') {
        logger.log({
          level: 'info',
          message: {
            user: vendorId,
            request: {
              orderData
            },
            response: {
              updated: true
            },
            service: 'updateOrder',
            date: date,
            type: 'UPDATE'
          }
        });
        callback({
          statusCode: Constants.errorStatus.SUCCESS,
          body: orderData,
          isUpdated: true
        });
      } else {
        logger.log({
          level: 'warn',
          message: {
            user: vendorId,
            request: {
              orderData
            },
            response: {
              updated: false,
              details: 'Id isnt found'
            },
            service: 'updateOrder',
            date: date,
            type: 'UPDATE'
          }
        });
        callback({
          statusCode: Constants.errorStatus.NOT_FOUND,
          body: 'Id is not matching',
          isUpdated: false
        });
      }

    }).catch((error) => {
      logger.log({
        level: 'error',
        message: {
          user: vendorId,
          request: {
            orderData
          },
          response: {
            error
          },
          service: 'updateOrder',
          date: date,
          type: 'UPDATE'
        }
      });
      callback({
        statusCode: Constants.errorStatus.BAD_REQUEST,
        body: error,
        isUpdated: false
      });

    });

},

我的发送对象就是这样

orderData={id:purchaseData.orderId,status:'PAID'}
purchaseData.orderId={'ord001','ord002'}

2 个答案:

答案 0 :(得分:0)

问题出在您的orderData对象上。您正在尝试这样的事情。

models.Orders.update({id:{'ord001','ord002'},status:'PAID'}, {
  ...
})

id:应该是单个值,例如{id:'ord001',status:'PAID'}


您可以更新多个记录,但所有记录的更新相同。。您的id更新不同。因此,您必须多次拨打update。阅读this answer

答案 1 :(得分:0)

updateOrders: (orderData, vendorId ,callback) => {

    const query='UPDATE Orders SET status="'+orderData.status+'" WHERE id IN ('+orderData.id+');';
    sequelize.query(query,
    { type: sequelize.QueryTypes.UPDATE }
    ).then(result => {
      if(result!='0'){
        logger.log({level: 'info', message: {user:vendorId ,request : {query} , response: {updated:true} ,service:'updateOrder', date:date ,type:'UPDATE'}});
        callback({statusCode: Constants.errorStatus.SUCCESS, body: orderData ,isUpdated:true});
      }else{
        logger.log({level: 'warn', message: {user:vendorId ,request : {query} , response: {updated:false ,details:'Id isnt found'} ,service:'updateOrder', date:date ,type:'UPDATE'}});
        callback({statusCode: Constants.errorStatus.NOT_FOUND, body: 'Id is not matching' ,isUpdated:false});
      } 

    }).catch((error) => {
      logger.log({level: 'error', message: {user:vendorId ,request : {query} , response: {error} ,service:'updateOrder', date:date ,type:'UPDATE'}});
      callback({statusCode: Constants.errorStatus.BAD_REQUEST, body: error ,isUpdated:false});

    }
    );  

  }
相关问题