我有一个用 Go 编写的 REST API 应用程序,它使用 GORM 作为 ORM。在某些部分的重构过程中,我想将一些常用操作移动到一个外部函数ApplyToDBQuery(query *gorm.DB)
,它接受一个指向数据库查询的指针并对其进行修改,以便修改后的查询以后可以用。
示例用法:
query = shared.DB.Debug()
req.ApplytoDBQuery(query)
if query.find(&data).Error != nil {...}
func (this *MyCustomRequest) ApplyToDBQuery(query *gorm.DB) {
query.Limit(...)
query.Offset(...)
query.Where(...)
}
我想,因为我传递了一个指向函数的指针,所以应该修改原始查询,但原始查询实际上没有发生任何事情。
我也试过传递一个指向指针ApplyToDBQuery(query **gorm.DB)
的指针,返回修改后的指针ApplyToDBQuery(query *gorm.DB) *gorm.DB
并且出于缺乏想法,甚至是这两者的组合 - ApplyToDBQuery(query **gorm.DB) *gorm.DB
最佳答案
Gorm 对象为每个操作克隆自身,因此原始指向的值永远不会改变。
你应该返回最新版本的 gorm.DB:
return query.Limit(...).Offset(...).Where(...)
关于go - 如何在函数中修改 GORM DB 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46106522/