Rumah  >  Artikel  >  pembangunan bahagian belakang  >  GORM tidak boleh mengemas kini data dalam perhubungan satu dengan banyak

GORM tidak boleh mengemas kini data dalam perhubungan satu dengan banyak

PHPz
PHPzke hadapan
2024-02-10 18:00:101171semak imbas

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

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.

Kandungan soalan

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

Penyelesaian

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam