使用 GORM 创建或更新记录:FirstOrCreate 与 Upsert
GORM 提供了两种创建或更新记录的方法:FirstOrCreate 和 FirstOrInit。但是,确定记录是否确实是使用这些方法创建的可能具有挑战性。
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中文网其他相关文章!