首頁  >  文章  >  後端開發  >  FirstOrCreate 與 Upsert:您應該使用哪種 GORM 方法來建立或更新記錄?

FirstOrCreate 與 Upsert:您應該使用哪種 GORM 方法來建立或更新記錄?

Linda Hamilton
Linda Hamilton原創
2024-11-09 16:20:02346瀏覽

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

使用 GORM 建立或更新記錄:FirstOrCreate 與 Upsert

GORM 提供了兩種建立或更新記錄的方法:FirstOrreate 和 FirstOrOrit。但是,確定記錄是否確實是使用這些方法創建的可能具有挑戰性。

GORM 1.20.x 及更高版本中的更新插入支援

自版本 1.20.x ,GORM 透過 OnConflict 子句引入了相容的 Upsert 支援。這允許在不同的資料庫上更新插入記錄。

// Update columns on conflict
DB.Clauses(clause.OnConflict{
  Columns:   []clause.Column{{Name: "id"}},
  DoUpdates: clause.AssignmentColumns([]string{"name", "age"}),
}).Create(&users)

GORM 1.9.x 及以下版本的替代方法

在GORM 的早期版本中,一種有效的方法來建立或更新記錄的方法是首先嘗試更新,如果記錄不存在,則接著插入。

if err := db.Model(&newUser).Where("id = ?", 3333).Update("name", "nick").Error; err != nil {
  if gorm.IsRecordNotFoundError(err) {
    db.Create(&newUser)
  }
}

FirstOrInit 和 FirstOrCreate 之間的區別

重要的是請注意 FirstOrInit 和 FirstOrCreate 之間的區別。雖然這兩種方法都會傳回指向現有或新建立的記錄的指針,但 FirstOrInit 僅初始化結構而不建立記錄,而 FirstOrCreate 建立一條記錄並將其查詢到結構中。

以上是FirstOrCreate 與 Upsert:您應該使用哪種 GORM 方法來建立或更新記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn