é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.
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) }
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!