[gogf/gf]gf db中使用where条件多个参数问题

2024-06-25 639 views
3

版本:1.7.0 操作系统:win10

疑问:为什么要将原有? 按照参数个数替换成多个?呢 我自己已经拼接了多个问号,但是gf where又添加了;

U)3`0KW5~WDIK98}5ZI 1{5

代码如下:

where := " 1 = 1 "
    var params []interface{}
    if form.Params != nil {
        if form.Params["username"] != "" {
            where += " and t.username like ? "
            params = append(params, "%"+form.Params["username"]+"%")
        }
        if form.Params["realName"] != "" {
            where += " and t.real_name like ? "
            params = append(params, "%"+form.Params["realName"]+"%")
        }
        if gconv.Int(form.Params["userType"]) > 0 {
            where += " and t.user_type = ? "
            params = append(params, gconv.Int(form.Params["userType"]))
        }
        if gconv.Int(form.Params["departId"]) > 0 {
            where += " and t.depart_id = ? "
            params = append(params, gconv.Int(form.Params["departId"]))
        }
    }

    num, err := model.dbModel("t").Where(where, params).Count()

回答

3

@zcool321

num, err := model.dbModel("t").Where(where, params).Count()

这里改成

num, err := model.dbModel("t").Where(where, params...).Count()
3

@zcool321 我可以在这里做一下校验判断以便直接支持slice类型的条件,优先级放后面。

6

可以通过num, err := model.dbModel("t").Where(where, params...).Count()解决; 但是使用不太方便;

1

@zcool321 该特性在v1.8.0已发布。

8

原有代码没问题

    where := " 1 = 1 "
    var params []interface{}

    err := model.dbModel("t").Fields(
        model.columns()).Where(where, params...).OrderBy(form.OrderBy).Structs(&resData)

升级后,传参数没有问题;但是传参数没有问题了~

    where := " 1 = 1 "
    var params []interface{}

    err := model.dbModel("t").Fields(
        model.columns()).Where(where, params).OrderBy(form.OrderBy).Structs(&resData)

会报错:strings: negative Repeat count

4

image

9

@zcool321 请更新到最新的v1.8.2再试试。