Maison  >  Article  >  développement back-end  >  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
PHPzavant
2024-02-10 18:00:101171parcourir

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)

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer