如何在 Gin Controller 中使用 GORM 构建灵活的动态查询条件?

如何在 gin controller 中使用 gorm 构建灵活的动态查询条件?

gin controller 中构建灵活的 gorm 查询条件

gin controller 中,构建复杂的查询条件可能面临灵活性和优雅性的挑战。本文将探讨如何使用 gorm 构建动态查询条件,以处理从前端接收的多变参数。

使用 map 接收参数

第一步是接收所有 get 参数并将其返回为 map

query := c.request.url.query()
var querymap = make(map[string]any, len(query))
for k := range query {
    if c.query(k) != "" {
        querymap[k] = c.query(k)
    }
}
return querymap

这样,所有查询参数都被存储在一个 map 中,可以根据需要访问。

构建复杂查询

接下来,使用 gorm 构建复杂的 where 条件。例如,以下代码展示了一个构建 where 语句的函数,该函数根据提供的 map 参数动态添加条件:

func buildsql(fields any, where map[string]any) *gorm.db {
    var db = db
    if fields != nil {
        db = db.select(fields)
    }
    if where != nil {
        if _, ok := where["id"]; ok {
            db = db.where("id = ?", where["id"])
        }
        if _, ok := where["types"]; ok {
            db = db.where("types = ?", where["types"])
        }
    }
    return db
}

此函数根据提供的查询 map 中存在的键动态添加 where 条件。

最终,可以在 gin controller 中使用此函数构建查询:

// 接收所有查询参数
queryMap := ReceiveAllParameters()

// 根据查询参数构建查询
db := BuildSql(nil, queryMap)

// 执行查询
var list []model.UserModel
db.Find(&list)

通过使用 map 接收参数和动态构建查询条件,您可以轻松处理从前端接收的多变查询参数,并以灵活和优雅的方式构建复杂的查询。

以上就是如何在 Gin Controller 中使用 GORM 构建灵活的动态查询条件?的详细内容,更多请关注硕下网其它相关文章!