2016-05-16 51 views
1

我想弄清楚如何使用非實例對象最好地更新一行。用例(我想)很常見。基本上,我有一個保存API方法:從Sequelize中的非實例更新

function save(req, res, next) { 
    var instance = req.body; 
    var promise; 

    if (instance[this.pkeyProperty]) { 
     promise = this.model.update(instance, { 
      [this.pkeyProperty]: instance[this.pkeyProperty], 
      returning: true 
     }) 
     .then((affectedCount, affectedRows) => affectedRows[0]) 
    } 
    else { 
     promise = this.model.create(instance); 
    } 

    promise 
     .then((instance) => res.ok(instance)) 
     .catch(err => res.serverError(err)); 
} 

想如果這是insertOrUpdate適當的方式(我看到UPSERT方法,但是我不想使用它,因爲我想我的電話給新返回創建實例,而不必在插入/更新後找到它們)。

回答

1

在你的情況我會使用findOrCreate method

function save(req, res, next) { 
    var instance = req.body; 

    this.model.findOrCreate({ 
     where : { [this.pKeyProperty] : instance[this.pKeyProperty] }, 
     defaults : instance 
    }).spread((result, created) => { 
     return created ? result : result.update(instance) 
    }).then(instance => { 
     res.ok(instance); 
    }).catch(err => res.serverError(err)); 
} 

它會找到或創建新實例並返回它。

+0

是的,但更新?我需要它在數據庫中創建或更新。看起來你的代碼只會創建... – pQuestions123

+0

啊,我的壞會修改。 – drinchev

+0

但是,您的代碼不需要兩個查詢來更新實例。我的問題是什麼(我相信只有一個查詢)。 – pQuestions123