FirstOrCreate vs. Upsert: Kaedah GORM manakah yang patut anda gunakan untuk membuat atau mengemas kini rekod?

Linda Hamilton
Lepaskan: 2024-11-09 16:20:02
asal
346 orang telah melayarinya

FirstOrCreate vs. Upsert: Which GORM method should you use for creating or updating records?

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)
Salin selepas log masuk

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)
  }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan