[gogf/gf]gf版本1.16.6,使用Count不正确

2024-07-09 319 views
0

1.m.FieldCount("id") 这个方法有问题,如果这样写 m.Fields("name").FieldCount("id") ,生成的sql会变成类似 select count(name,id),然后报错 2.改进建议:方法FieldCount() 底层能不能改一下,覆盖原有的Fields

回答

9

为啥要带.Fields("name"),直接使用.FieldCount("id") 即可

4

封了一个分页的方法,传入model对象(里面有了fields()方法),这个时候再方法内计算count()的话,无法覆盖原有的fields()里的字段

上一个版本 1.16.5 执行的事覆盖逻辑,升级一下就不行了

4

func Page(m *gdb.Model, query Query, bean interface{}, fields ...string) (*Result, error) {
    m = query.Cond(m)
    mp := m.Clone()
    var total int
    mp.FieldCount("id")
    total, err := mp.Fields("*").Count()
    if err != nil {
        return nil, err
    }

    pageIndex := query.GetPageIndex()
    pageSize := query.GetPageSize()

    for _, v := range fields {
        m = m.Fields(v)
    }
    listM := m.Page(query.GetPageIndex(), query.GetPageSize())
    order := query.GetOrder()
    if len(order) > 0 {
        listM = listM.Order(order)
    }

    err = listM.Scan(bean)
    if err != nil {
        return nil, err
    }
    return NewResult(pageIndex, pageSize, total).WithRecords(bean), nil
}

@danvinhe 我们自己封装了这个方法,但是发现fields会自动拼接。并且多种count方法都会去拼接Fields,我觉得是否预留一个方法可以让我们重置Fields更好一点。只是我的想法不知道是否合理。

1
total, err := mp.Count()
    if err != nil {
        return nil, err
    }
mp = mp.Fields("*")

改成这样试试

2

@danvinhe @pihc @sanrentai @larryclean 大家好,Fields方法确实是追加。分页可以参考如下,注意上面的条件是两种不同SQL查询共享的,但是在各自独立的链式操作中添加的条件是不共享的: image