editor php Apple mungkin menghadapi masalah biasa apabila menggunakan rangka kerja GORM: data dalam perhubungan satu-ke-banyak tidak boleh dikemas kini. Dalam perhubungan satu dengan banyak, kami biasanya mempunyai jadual induk dan jadual hamba, tetapi apabila melakukan operasi kemas kini, GORM mungkin tidak mengendalikan kemas kini data daripada jadual hamba dengan betul. Masalah ini boleh menyebabkan data tidak konsisten atau kegagalan kemas kini. Dalam artikel seterusnya, kami akan meneroka penyelesaian kepada masalah ini secara terperinci untuk membantu pembangun menggunakan rangka kerja GORM dengan lebih baik.
Saya mempunyai dua pengguna jadual dan dokumen. Ia berkaitan sedemikian rupa sehingga setiap dokumen mestilah milik pengguna yang menggunakan perhubungan satu-ke-banyak. Apabila saya cuba mengemas kini dokumen saya mendapat ralat berikut
error: insert or update on table "documents" violates foreign key constraint "fk_users_documents" (sqlstate 23503)
Ini adalah definisi struktur dan fungsi kemas kini saya
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) }
Anda sedang memanggil Db.Save(&document)
但 document
仅填充了其 Name
字段。这意味着 UserID
设置为 0。我猜测 User
Tiada pengguna dengan ID 0 wujud dalam jadual, jadi ini melanggar kekangan kunci asing.
Apabila mengemas kini dokumen, medan UserID
hendaklah sentiasa ditetapkan kepada pengguna sedia ada, jika tidak pertanyaan akan gagal.
Apa pun, saya syorkan anda mempelajari beberapa asas pangkalan data dan golang kerana kod yang anda siarkan agak mengelirukan.
Atas ialah kandungan terperinci GORM tidak boleh mengemas kini data dalam perhubungan satu dengan banyak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!