Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah Ciri Upsert GORM Berfungsi Berbanding dengan FirstOrCreate dan FirstOrInit?
Dalam GORM, kedua-dua kaedah FirstOrCreate dan FirstOrInit boleh digunakan untuk mendapatkan semula atau mencipta rekod pangkalan data. Walau bagaimanapun, menentukan sama ada rekod baru dibuat atau dikemas kini mungkin tidak jelas.
Penyelesaian Upsert dengan Upsert-On-Conflict
Dari GORM 1.20.x dan seterusnya, penyelesaian yang dipertingkatkan Ciri Upsert diperkenalkan, yang menggunakan keupayaan pengendalian konflik untuk pelbagai pangkalan data.
// Update columns when conflict on id DB.Clauses(clause.OnConflict{ Columns: []clause.Column{{Name: "id"}}, DoUpdates: clause.AssignmentColumns([]string{"name", "age"}), }).Create(&users)
Coretan ini diterjemahkan kepada pernyataan SQL seperti:
Fallback Solution untuk Versi GORM Lama
Untuk versi GORM sebelum 1.9.x, pendekatan yang lebih cekap ialah mencuba kemas kini dahulu, diikuti dengan mencipta yang baharu rekod jika tiada padanan ditemui.
// Update only set name=nick if err := db.Model(&newUser).Where("id = ?", 3333).Update("name", "nick").Error; err != nil { // Handle error... if gorm.IsRecordNotFoundError(err) { db.Create(&newUser) // Create new record from newUser } }
Membezakan antara FirstOrInit dan FirstOrCreate
Walaupun kedua-dua kaedah mempunyai tujuan yang sama, tingkah lakunya adalah berbeza:
Atas ialah kandungan terperinci Bagaimanakah Ciri Upsert GORM Berfungsi Berbanding dengan FirstOrCreate dan FirstOrInit?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!