Nach der Dokumentation der update
Methode hat zwei Parameter - erste values
ist, die verwendet wird, um das Update durchzuführen, und das zweite ist options
- so in Ihrem Fall ist dies die where
Klausel. Wenn Sie nur eine einzelne Instanz aktualisieren möchten, können Sie dies auf zwei Arten tun: Verwenden Sie die Methode Model.update()
, die mehrere Instanzen dieses Modells gleichzeitig mit der where
-Klausel aktualisieren oder instance.update()
ausführen kann, um nur die einzige Instanz zu aktualisieren Beispiel. Die erste Option sieht dann so aus:
Die erste Option ist nicht sehr nützlich, wenn Sie nur einzelne Instanzen aktualisieren möchten. Das ist also, warum eine Möglichkeit besteht, update()
der Durchführung auf Sequelize Modellinstanz
let updateValues = { name: 'changed name' };
instance.update(updateValues).then((self) => {
// here self is your instance, but updated
});
In Ihrem Fall, wenn die item
Parameter eine Sequelize Modellinstanz (nicht ein einfache JavaScript-JSON-Objekt) ist, Ihre Update-Funktion wie die jedoch
exports.updateItem = function(item){
return item.update(values).then((self) => {
return self;
}).catch(e => {
console.log(e);
});
};
sein könnte, wenn die item
keine sequelize Modellinstanz ist aber nur ein einfaches Objekt mit Werten, die Sie aktualisieren möchten, könnte es in zwei Arten erfolgen - erstenzu verwenden ist(genau wie Sie getan haben), oder zweite ist TimesheetItem
mit id = item.id
abzurufen und dann instance.update()
ausführen, wie oben
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);
});
};
oder die zweite Option mit der Rückkehr Instanz und Durchführung Update auf sie
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);
});
}
gezeigt
Der Unterschied ist, dass Sie keine eigenen Promise
- Sequelize-Methoden wie update()
Rückgabeversprechen selbst erstellen und zurückgeben müssen.
Wunderbare Antwort, Sie haben es perfekt erklärt. Vielen Dank! – troyz