Mencipta atau Mengemas kini Rekod dengan GORM: FirstOrCreate vs. Upsert
GORM menyediakan dua kaedah untuk mencipta atau mengemas kini rekod: FirstOrCreate dan FirstOrInit. Walau bagaimanapun, adalah sukar untuk menentukan sama ada rekod sebenarnya dibuat menggunakan kaedah ini.
Sokongan Upsert dalam GORM 1.20.x dan Ke Atas
Sejak versi 1.20.x , GORM memperkenalkan sokongan Upsert yang serasi melalui klausa OnConflict. Ini membolehkan untuk menambah rekod pada pangkalan data yang berbeza.
// Update columns on conflict DB.Clauses(clause.OnConflict{ Columns: []clause.Column{{Name: "id"}}, DoUpdates: clause.AssignmentColumns([]string{"name", "age"}), }).Create(&users)
Pendekatan Alternatif untuk GORM 1.9.x dan Di Bawah
Dalam versi GORM yang terdahulu, kaedah yang cekap untuk mencipta atau kemas kini rekod adalah dengan mencuba kemas kini dahulu, diikuti dengan sisipan jika rekod tidak wujud.
if err := db.Model(&newUser).Where("id = ?", 3333).Update("name", "nick").Error; err != nil { if gorm.IsRecordNotFoundError(err) { db.Create(&newUser) } }
Perbezaan antara FirstOrInit dan FirstOrCreate
Adalah penting untuk perhatikan perbezaan antara FirstOrInit dan FirstOrCreate. Walaupun kedua-dua kaedah mengembalikan penunjuk kepada rekod sedia ada atau yang baru dibuat, FirstOrInit hanya memulakan struct tanpa mencipta rekod, manakala FirstOrCreate mencipta rekod dan menanyakannya ke dalam struct.
Atas ialah kandungan terperinci FirstOrCreate vs. Upsert: Kaedah GORM manakah yang patut anda gunakan untuk membuat atau mengemas kini rekod?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!