使用 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中文網其他相關文章!