我是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,但是要小心只传递指针,而不要取消引用它(否则,您会发现发现的锁复制错误)。
Order只是可以链接的另一种查询:http://gorm.io/docs/query.html#Order

例如:

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

因此,您的applyWhere应该只返回*gorm.DB,您可以进一步查询

关于pointers - (可选)将.Where()应用于gorm.DB,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55923332/

10-13 06:40
查看更多