2016-05-16 4 views
1

非インスタンスオブジェクトを使用して行を最適に更新する方法を理解しようとしています。ユースケースは非常に一般的です(私が推測します)。これはinsertOrUpdateに適切な方法であれば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)); 
} 

しかし、私は私の呼び出しは、新たに返すようにしたいので、それを使用したくない、私はアップサート方​​法を見ました(不思議:基本的に、私は保存するAPIメソッドを持っています挿入/更新後にインスタンスを見つけることなくインスタンスを作成できます)。あなたのケースでは

答えて

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

はい、更新はどうですか? dbで作成または更新する必要があります。あなたのコードのように見えるだけを作成します... – pQuestions123

+0

ああ私の悪いが変更されます。 – drinchev

+0

しかし、あなたのコードはインスタンスを更新するために2つのクエリを取っていません。鉱山で何が問題になっているのですか(これは1つの質問をするとしか信じません)。 – pQuestions123

関連する問題