Golang Go语言中请问 gorm 如何获取到更新后的值

发布于 1周前 作者 phonegap100 来自 Go语言

Golang Go语言中请问 gorm 如何获取到更新后的值

type Counter struct {
BizName   string gorm:"primary_key"
NextId    string
CreatedAt time.Time
}

counter := model.Counter{BizName: “class”}

err = d.Model(&counter).Update(ctx, “next_id”, gorm.Expr(“next_id + ?”,1)).Error

想实现一个简易的发号器,想利用 mysql update 的原子性,更新 NextId 并获取到更新后的值,请问如何搞定


更多关于Golang Go语言中请问 gorm 如何获取到更新后的值的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

d.Model(&counter).Update(ctx, “next_id”, gorm.Expr(“next_id + ?”,1)).Find(&counter).Error

更多关于Golang Go语言中请问 gorm 如何获取到更新后的值的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


利用 postgresql 的 Returning 关键字。mysql 或者其他估计也有对应的解决方案。

d.Model(&counter).Debug().Update(ctx, “next_id”, gorm.Expr(“next_id + ?”,1))

d.Model(&counter).Update(ctx, “next_id”, gorm.Expr(“next_id + ?”,1)).Find(&counter).Scan(&counter).Error

在Go语言中,使用GORM(Go Object-Relational Mapping)库时,如果你需要在执行更新操作后获取到更新后的值,有几种常见的方法可以实现这一点。

  1. 使用Find方法重新查询: 在执行SaveUpdate方法后,你可以使用Find方法重新查询数据库,以获取更新后的完整记录。这是最直接的方法,但可能会增加一次额外的数据库查询。

  2. 使用RowsAffectedReturning: GORM支持在更新时通过Returning子句返回被更新的列。这通常用于PostgreSQL数据库。例如:

    var updatedModel YourModel
    db.Model(&yourInstance).Update("column", value).Returning("*").First(&updatedModel)
    

    这里Returning("*")会返回更新后的所有列。注意,Returning的具体用法可能因数据库类型而异。

  3. 使用事务和临时变量: 在事务中,你可以先查询当前记录,然后执行更新操作,并在事务提交后使用查询到的临时变量。这种方法适用于需要确保数据一致性的场景。

  4. 检查数据库驱动和GORM版本: 确保你使用的数据库驱动和GORM版本支持你想要使用的特性。不同版本的GORM在API和功能上可能有所不同。

选择哪种方法取决于你的具体需求,比如性能考虑、数据库类型以及代码的可读性和维护性。

回到顶部