ドキュメントによればupdate
方法は、2つのパラメータを取ります。単一のインスタンスに対してのみ更新を実行する場合は、where
句に一致するこのモデルの複数のインスタンスを一度に更新できるModel.update()
メソッドを使用するか、単一のインスタンスのみを更新するためにinstance.update()
を実行する2つの方法で行うことができますインスタンス。最初のオプションは次のようになります。
let updateValues = { name: 'changed name' };
models.Model.update(updateValues, { where: { id: 1 } }).then((result) => {
// here your result is simply an array with number of affected rows
console.log(result);
// [ 1 ]
});
最初のオプションは、1つのインスタンスのみを更新する場合にはあまり役に立ちません。 item
パラメータがSequelizeモデルインスタンス(ないのJavaScript JSONオブジェクトプレーン)であれば、あなたのケースでSequelizeモデルインスタンス
let updateValues = { name: 'changed name' };
instance.update(updateValues).then((self) => {
// here self is your instance, but updated
});
にupdate()
を実行する可能性があるだから、なぜ、あなたの更新機能でありますitem
は、更新したい値を持つsequelizeモデルインスタンスだけのプレーンオブジェクトでない場合は、しかし、その
exports.updateItem = function(item){
return item.update(values).then((self) => {
return self;
}).catch(e => {
console.log(e);
});
};
ようなことができ、二つの方法で行うことができる - 最初を使用することです(あなたがやったように)、またはもう一つはid = item.id
でTimesheetItem
を取得し、
exports.updateItem = function(item){
models.TimesheetItem.update(item, { where: { id: item.id } }).then((result) => {
// here result will be [ 1 ], if the id column is unique in your table
// the problem is that you can't return updated instance, you would have to retrieve it from database once again
return result;
}).catch(e => {
console.log(e);
});
};
またはインスタンスを返すと、その上にアップデートを実行して第二の選択肢の上に示すように、instance.update()
を実行することである
exports.updateItem = function(item) {
return models.TimesheetItem.findById(item.id).then((itemInstance) => {
return itemIstance.update(item).then((self) => {
return self;
});
}).catch(e => {
console.log(e);
});
}
違いは、Promise
を作成して返す必要はないということです。update()
返品約束などの方法を続けることができます。
素敵な答え、あなたはそれを完全に説明しました。 多くの感謝! – troyz