首页  >  文章  >  后端开发  >  FirstOrCreate 与 Upsert:您应该使用哪种 GORM 方法来创建或更新记录?

FirstOrCreate 与 Upsert:您应该使用哪种 GORM 方法来创建或更新记录?

Linda Hamilton
Linda Hamilton原创
2024-11-09 16:20:02350浏览

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

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn