2017-03-31 109 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