我正在寻找使用gorm for Postgres更新表的多行的最佳方法。
type Info struct {
gorm.Model
Name string
Email string
}
我希望能够使用gorm在单个事务中更新Info
的切片。
我现在正在用这种方式处理事务,但这似乎不是很健壮
func UpdateInfos(ctx context.Context, db *gorm.DB, infos []Info) error {
var err error
tx := db.Begin()
for _, info := range infos {
tx.Model(&info).Where("id = ?", info.ID).Updates(info)
}
err = tx.Commit().Error
return err
}
很想知道是否有人找到了解决这类问题的方法。
gorm v1不支持批量更新。如果您想使用gorm v1并更新多行,那么您必须在信息片上循环。Gorm v2支持批量更新。下面是相同
的文档您可以使用保存方法
func UpdateInfos(ctx context.Context, db *gorm.DB, infos []Info) error {
...
tx.Save(info)
...
err = tx.Commit().Error
return err
}