php-Editor Apple kann bei der Verwendung des GORM-Frameworks auf ein häufiges Problem stoßen: Daten in einer Eins-zu-Viele-Beziehung können nicht aktualisiert werden. In einer Eins-zu-Viele-Beziehung haben wir normalerweise eine Master-Tabelle und eine Slave-Tabelle, aber bei der Durchführung von Aktualisierungsvorgängen verarbeitet GORM möglicherweise Datenaktualisierungen aus der Slave-Tabelle nicht korrekt. Dieses Problem kann zu Dateninkonsistenzen oder Aktualisierungsfehlern führen. Im nächsten Artikel werden wir die Lösung dieses Problems im Detail untersuchen, um Entwicklern dabei zu helfen, das GORM-Framework besser zu nutzen.
Ich habe zwei Tabellen Benutzer und Dokument. Sie sind so miteinander verbunden, dass jedes Dokument einem Benutzer gehören muss und eine Eins-zu-Viele-Beziehung besteht. Wenn ich versuche, das Dokument zu aktualisieren, erhalte ich die folgende Fehlermeldung
error: insert or update on table "documents" violates foreign key constraint "fk_users_documents" (sqlstate 23503)
Dies ist meine Strukturdefinitions- und Aktualisierungsfunktion
type User struct { gorm.Model Name string Email string Password string Documents []Document } type Document struct { gorm.Model Name string UserID uint } //Update document by id func (h handler)UpdateDocument(w http.ResponseWriter, r *http.Request) { // once again, we will need to parse the path parameters var updatedDoc Document reqBody, _ := ioutil.ReadAll(r.Body) json.Unmarshal(reqBody, &updatedDoc) var document Document vars := mux.Vars(r) id := vars["id"] if result := Db.First(&updatedDoc, id); result.Error != nil { fmt.Println(result.Error) } document.Name=updatedDoc.Name Db.Save(&document) json.NewEncoder(w).Encode(&updatedDoc) }
Sie rufen an Db.Save(&document)
但 document
仅填充了其 Name
字段。这意味着 UserID
设置为 0。我猜测 User
In der Tabelle ist kein Benutzer mit der ID 0 vorhanden, daher verstößt dies gegen die Fremdschlüsseleinschränkung.
Beim Aktualisieren eines Dokuments sollte das UserID
-Feld immer auf einen vorhandenen Benutzer gesetzt sein, sonst schlägt die Abfrage fehl.
Wie auch immer, ich empfehle Ihnen, sich mit den Datenbank- und Golang-Grundlagen vertraut zu machen, da der von Ihnen gepostete Code ziemlich verwirrend ist.
Das obige ist der detaillierte Inhalt vonGORM kann Daten nicht in einer Eins-zu-Viele-Beziehung aktualisieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!