2017-03-31 111 views
1

我需要改变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块中,我得到updatedMember1。另外,如果我将status更改为表中不是字段的其他内容,即joe: 0,updatedMember仍会返回1

问:

  1. 可以.update返回受影响的对象?

  2. 如果我想更改表中不存在的字段,是否应该收到错误?

回答

0

如果您使用的是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) 
     }) 
+0

谢谢。我使用的是MySQL和文档说'而第二个元素是实际受影响的行(只有postgres与选项支持。返回true)。'我相信我将不得不后退到'.find',然后'.update'。我确实尝试了第二个参数,但它回来了'undefined'。 – user1107173

+1

我不得不多次更新我的原始回复,因为我再次阅读并试用了它。我希望Sequelize文档更清楚一点。我无法分辨出括号是否意味着只有在postgres中设置了选项时才支持该选项,这意味着它可以在没有选项的情况下在其他地方使用,或者只能在选项设置为period的postgres中使用。我在自己的项目中尝试过自己,发现它是后者。 Mysql不会这样做。抱歉 – wlh