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

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

PHPz
PHPznach vorne
2024-02-10 18:00:101172Durchsuche

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)

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)
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen