登录
首页 >  Golang >  Go问答

可选择将 .Where() 应用于 gorm.DB

来源:stackoverflow

时间:2024-04-13 22:27:37 183浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《可选择将 .Where() 应用于 gorm.DB》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

我是 go 新手,我的指针知识很生疏。我想改变 gorm.db 的一个实例,以便我可以对其应用 0 个或多个 where 子句。

func () {
    db := gorm.Open(/* ... */)
    err := applyWhere(db, filters).Order("created_datetime desc").Find(&rMessages).Error
    // ...
}

func applyWhere(db *gorm.DB, filters Filters) *gorm.DB {
    if filters.MessageType != "" {
        db = db.Where(&message{MessageType: string(filters.MessageType)})
    }
    return db
}

这似乎不起作用。数据库实例没有应用的位置。

* 编辑 3 *

现在可以了。不知道之前是什么问题。请关闭/删除此问题。


解决方案


在这里阅读如何正确使用 gorm 进行链接:Method Chaining tutorial。您采用一种方法返回的 *gorm.db 并对其应用另一种方法,就是这样。您还可以传递 *gorm.db ,但要小心只传递指针,而不是取消引用它(否则您会遇到所发现的锁定复制错误)。

orders 只是您可以链接的另一种查询:http://gorm.io/docs/query.html#Order

例如:

var p Product
db.Order("Price").Where("Price > 1000").First(&p)

所以你的 applywhere 应该只返回 *gorm.db ,你可以进一步查询

好了,本文到此结束,带大家了解了《可选择将 .Where() 应用于 gorm.DB》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>