GORM 中如何构建灵活的复杂查询条件?

gorm 中如何构建灵活的复杂查询条件?

gorm 中灵活构建复杂查询条件

gin controller 中使用 gorm 时,需要动态构建灵活的查询条件,对于不同的查询参数组合,单纯使用字符串拼接方式不仅麻烦,也不优雅。

解决方案:构建条件查询 map

第一步,在 controller 中接收所有 query 参数并转换为 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)
    }
}

第二步,在 service 中根据 querymap 构建复杂的 where 条件:

func buildsql(fields any, where map[string]any) *gorm.db {
    var db = db
    if fields != nil {
        db = db.select(fields)
    }
    if where != nil {
        for k, v := range where {
            db = db.where(k+" = ?", v)
        }
    }
    return db
}

这样,在 controller 中使用以下代码即可执行灵活的查询:

UserServie.Find(UserServie.BuildSql(nil, queryMap))

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