So habe ich seit ein paar Stunden mit einem Eins-zu-viele-Mapping-Update gekämpft.eins zu viele - Fortsetzung Update - Kinder nicht entfernen/einfügen
Ich habe eine project
, die bestimmte tasks
(zum Beispiel) hat. Ich füge Aufgaben hinzu und entferne sie über das Frontend und sende das überarbeitete Objekt an das Backend, das mit sequelize läuft.
Dann habe ich versucht, die Datensätze zu aktualisieren, wie folgt:
return models.Project
.findOne({
where: { id: projectToUpdate.id },
include: [models.Task]
})
.then(function (ProjectFromDb) {
return models.sequelize
.transaction({
isolationLevel: models.sequelize.Transaction.ISOLATION_LEVELS.READ_COMMITTED
},
function (t) {
return ProjectFromDb
.update(projectToUpdate,
{
include: [{ model: models.Task }]
})
});
})
.then(function (result) {
return output.getSuccessResult(....
})
.catch(function (error) {
return output.getErrorResult(....
});
Dies würde aber nur die Project
Nächstes Update Ich habe versucht, sie mit einem zusätzlichen then
Aufruf zu aktualisieren:
.then(function (updateResult) {
return updateResult.setTasks(projectToUpdate.Tasks, {transaction: t})
})
Aber das würde mir das Ergebnis geben, dass er versucht, die Task
zu aktualisieren und dieeinzustellenbis NULL
, was nicht möglich ist, weil es nicht nullfähig ist.
Ich bin derzeit "manuell" Hinzufügen der tasks
und Entfernen von ihnen, aber das scheint eine alberne Art der Verwendung des Rahmens sein.
Kann mir jemand sagen, wie man das mit einer Eins-zu-Viele-Beziehung richtig macht, ohne dass ich Tasks.createBulk
und Tasks.destroy
anrufe?
EDIT EINZUBEZIEHEN MODEL JSON-Objekt wie folgt aussieht:
{
id: 1,
projectName: 'nameOfTheProject',
Tasks: [
projectId: 1,
name: 'taskName'
]
}
Können Sie uns zu diesem Zeitpunkt den Inhalt von 'projectToUpdate' zeigen? Ist es ein Sequelize-Modell oder nur ein gewöhnliches JS-Objekt? Danke – demarchisd
Es ist ein JSON-Objekt aus dem Front-End. Nichts mehr. {'name:" somename ", Aufgaben: [..sometasks ..]}' (das ist natürlich vereinfacht) – Tikkes
Richtig, und was ist das Format der Objekte in der 'Aufgaben' Liste? Haben sie ein Attribut 'ProjectId'? Sorry für den Missbrauch, aber es wäre nett, wenn Sie Ihre Frage mit einer legitimen JSON-Darstellung Ihres 'projectToUpdate' zur Laufzeit bearbeiten könnten – demarchisd