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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可选择将.Where()应用于gorm.DB相关的知识,希望对你有一定的参考价值。

我是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
}

这似乎不起作用。 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的主要内容,如果未能解决你的问题,请参考以下文章

使用logrus记录gorm sql

使用logrus记录gorm sql

gorm hook使用中的问题及核心源码解读

gorm hook使用中的问题及核心源码解读

如何将`where`条件应用于每条记录

如何使用结构更新多个属性