Ich benutze Backand, um die Datenbank und REST API für meine Angular App bereitzustellen.
Ich arbeite an einer Funktion für Benutzer, um Änderungen an einem komplexen Objekt vorzunehmen, das dann in der Datenbank aktualisiert werden sollte. Einfach genug ...
Das Objekt sieht ein bisschen wie folgt aus:
obj = {
id: 1, // assigned by the db
name: "My List",
tasks: [
{ id: 1, desc: "Task 1" },
{ id: 2, desc: "Task 2" },
...
]
}
Für das Update ($ http PUT) Anruf, Ich mag würde params: { deep: true }
als Verknüpfung verwenden, um Code und $http
Anrufe zu minimieren.
Das Problem im Moment ist, dass, während der PUT-Befehl das "Master" -Objekt in der Datenbank aktualisiert, die bearbeiteten "untergeordneten" Objekte nicht aktualisiert, sondern als neue untergeordnete Objekte angehängt werden.
Zum Beispiel, wenn ich versuche, die Master-und Kind-Objekte in einem Aufruf zu aktualisieren:
$http({
method: 'PUT',
url: baseUrl + 'lists/' + list.id,
params: {
deep: true
},
data: {
id: 1,
name: "My To Do List",
tasks: [
{ id: 1, desc: "New Description for Task 1" },
{ id: 2, desc: "New Description for Task 2" }
]
}
}).then(....);
die Datenbank nicht Update die untergeordneten Objekte, es fügt sie. Hier ist, wie das resultierende Objekt in der Datenbank:
list = {
id: 1,
name: "My To Do List", // Updated correctly
tasks: [
{ id: 1, desc: "Task 1" },
{ id: 2, desc: "Task 2" },
{ id: 3, desc: "New Description for task 1" }, // Added not updated
{ id: 4, desc: "New Description for task 2" } // Added not updated
]
}
Ich habe dafür gesorgt, dass die untergeordneten Objekte id
s richtig sind.
Gibt es eine Möglichkeit, dies prägnant zu tun oder bin ich damit einverstanden, es in mehreren Stufen zu tun? Funktioniert deep = true
überhaupt mit PUT? Die Backand docs erwähnen es nicht.