我是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 *
现在可以使用。不知道是什么问题。请关闭/删除此问题。
答案 0 :(得分:1)
在以下位置了解如何正确使用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
,您可以进一步查询