Maison > développement back-end > Golang > GORM ne peut pas mettre à jour les données dans une relation un-à-plusieurs

GORM ne peut pas mettre à jour les données dans une relation un-à-plusieurs

PHPz
Libérer: 2024-02-10 18:00:10
avant
1233 Les gens l'ont consulté

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

éditeur php Apple peut rencontrer un problème courant lors de l'utilisation du framework GORM : les données dans une relation un-à-plusieurs ne peuvent pas être mises à jour. Dans une relation un-à-plusieurs, nous avons généralement une table maître et une table esclave, mais lors de l'exécution d'opérations de mise à jour, GORM peut ne pas gérer correctement les mises à jour des données de la table esclave. Ce problème peut entraîner une incohérence des données ou un échec de mise à jour. Dans le prochain article, nous explorerons en détail la solution à ce problème pour aider les développeurs à mieux utiliser le framework GORM.

Contenu de la question

J'ai deux tables utilisateur et document. Ils sont liés de telle manière que chaque document doit appartenir à un utilisateur utilisant une relation un-à-plusieurs. Lorsque j'essaie de mettre à jour le document, j'obtiens l'erreur suivante

error: insert or update on table "documents" violates foreign key
constraint "fk_users_documents" (sqlstate 23503)
Copier après la connexion

Voici ma définition de structure et ma fonction de mise à jour

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)
}
Copier après la connexion

Solution de contournement

Vous appelez Db.Save(&document)document 仅填充了其 Name 字段。这意味着 UserID 设置为 0。我猜测 User Aucun utilisateur avec l'ID 0 n'existe dans la table, cela viole donc la contrainte de clé étrangère.

Lors de la mise à jour d'un document, le champ UserID doit toujours être défini sur un utilisateur existant, sinon la requête échouera.

Quoi qu'il en soit, je vous recommande d'apprendre quelques bases de base de données et de Golang car le code que vous avez publié est assez déroutant.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal