我正在尝试使用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'}
答案 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});
}
);
}