0
1.m.FieldCount("id") 这个方法有问题,如果这样写 m.Fields("name").FieldCount("id") ,生成的sql会变成类似 select count(name,id),然后报错 2.改进建议:方法FieldCount() 底层能不能改一下,覆盖原有的Fields
1.m.FieldCount("id") 这个方法有问题,如果这样写 m.Fields("name").FieldCount("id") ,生成的sql会变成类似 select count(name,id),然后报错 2.改进建议:方法FieldCount() 底层能不能改一下,覆盖原有的Fields
为啥要带.Fields("name"),直接使用.FieldCount("id") 即可
封了一个分页的方法,传入model对象(里面有了fields()方法),这个时候再方法内计算count()的话,无法覆盖原有的fields()里的字段
上一个版本 1.16.5 执行的事覆盖逻辑,升级一下就不行了
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更好一点。只是我的想法不知道是否合理。
total, err := mp.Count()
if err != nil {
return nil, err
}
mp = mp.Fields("*")
改成这样试试
@danvinhe @pihc @sanrentai @larryclean 大家好,Fields
方法确实是追加。分页可以参考如下,注意上面的条件是两种不同SQL查询共享的,但是在各自独立的链式操作中添加的条件是不共享的: