go - 如何在函数中修改 GORM DB 指针?

标签 go go-gorm

我有一个用 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/

相关文章:

go - 如何使用 GORM 初始化具有外键约束的结构并将其插入数据库

go - 从嵌套映射类型获取值 map[string]interface{}

go - 在 go 中重用带有 context.WithTimeout 的父上下文?

go - 使用 Jaeger 在分布式应用程序中跟踪 Kafka 总线

go - 如何在golang中解压缩grpc status.details错误?

arrays - 如何在 Go 中保持强引用?

rest - 如何在 golang 中处理未设置值的补丁请求

go - 如何在 Gorm 中正确执行部分更新?

当找不到值时,Gorm 返回空对象而不是默认对象

GORM 不忽略 `gorm:"-"` 字段