Sequlize.js:.update不返回受影响的行
问题描述:
我需要改变status
并取回受影响的行:Sequlize.js:.update不返回受影响的行
db.Member.update({
status: 0
}, {
where: {
id: member.id,
group_id: member.group_id,
}
}).then((updatedMember) => {
console.log("Member" + updatedMember)
// This returns 'Member 1',
// and the in the DB, the status field does change to 0
}).catch((err) => {
console.log("err " + err)
})
的.then
块中,我得到updatedMember
为1
。另外,如果我将status
更改为表中不是字段的其他内容,即joe: 0
,updatedMember
仍会返回1
。
问:
可以
.update
返回受影响的对象?如果我想更改表中不存在的字段,是否应该收到错误?
答
如果您使用的是Postgres,当且仅当...
根据文档(http://sequelize.readthedocs.io/en/v3/api/model/#updatevalues-options-promisearrayaffectedcount-affectedrows),更新函数返回两个对象的数组,首先是受影响的行数,第二个是实际受影响的行(但只有在使用postgres时)。如果你使用的是mysql,它将不起作用。
因此,我认为你可以更改您的代码下面,它应该工作:
db.Member.update({
status: 0
}, {
where: {
id: member.id,
group_id: member.group_id,
}
}).then((updatedMember) => {
//updatedMember[0] will now be 1, updatedMember[1] should be the affected row
console.log("Member" + updatedMember[1])
}).catch((err) => {
console.log("err " + err)
})
谢谢。我使用的是MySQL和文档说'而第二个元素是实际受影响的行(只有postgres与选项支持。返回true)。'我相信我将不得不后退到'.find',然后'.update'。我确实尝试了第二个参数,但它回来了'undefined'。 – user1107173
我不得不多次更新我的原始回复,因为我再次阅读并试用了它。我希望Sequelize文档更清楚一点。我无法分辨出括号是否意味着只有在postgres中设置了选项时才支持该选项,这意味着它可以在没有选项的情况下在其他地方使用,或者只能在选项设置为period的postgres中使用。我在自己的项目中尝试过自己,发现它是后者。 Mysql不会这样做。抱歉 – wlh