使用 GORM 建立或更新記錄
GORM 提供了兩種管理資料庫中記錄的方法:FirstOrCreate() 和 FirstOrInit()。但是,有時您可能會遇到需要區分建立和更新記錄的情況。
檢查記錄建立
FirstOrCreate() 嘗試根據記錄查找記錄根據指定的標準。如果存在,則傳回現有記錄。如果不存在,則建立新記錄並傳回新建立的記錄。
要檢查記錄是否實際創建,您可以在交易中使用 Create 方法。如果交易成功,則記錄已建立。如果交易失敗,則表示該記錄已存在且尚未建立。
func CreateOrUpdateRecord(tx *gorm.DB, record *Model) error { if err := tx.Create(record).Error; err != nil { return err // Record already exists } return nil // Record created }
使用 GORM 更新插入
從 GORM 1.20.x 開始,這是一個方便的功能稱為「Upsert」可用。它透過提供相容的「衝突時更新插入」機制結合了 CreateOrUpdateRecord 的功能。
// Update columns to new value on `id` conflict tx.Clauses(clause.OnConflict{ Columns: []clause.Column{{Name: "id"}}, // key column DoUpdates: clause.AssignmentColumns([]string{"name", "age"}), // columns needed to be updated }).Create(&users)
此查詢轉換為SQL 語句,例如:
FirstOrInit 與FirstOrInit 對比FirstOrCreate
需要注意的是,FirstOrInit() 和FirstOrCreate() 有不同的用途。 FirstOrInit() 初始化一個結構體,但不會在資料庫中建立記錄。另一方面,FirstOrCreate() 將建立一筆記錄,然後將其查詢到提供的結構中。
以上是我什麼時候應該在 GORM 中使用 FirstOrCreate() 與 FirstOrInit() ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!