Heim > Backend-Entwicklung > Golang > GORM kann Daten nicht in einer Eins-zu-Viele-Beziehung aktualisieren

GORM kann Daten nicht in einer Eins-zu-Viele-Beziehung aktualisieren

PHPz
Freigeben: 2024-02-10 18:00:10
nach vorne
1218 Leute haben es durchsucht

GORM 无法更新一对多关系中的数据

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.

Frageninhalt

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)
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

Workaround

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage