这5个方法是数据查询比较常用的方法,方法列表:
func (m *Model) All(where ...interface{} (Result, error) func (m *Model) One(where ...interface{}) (Record, error) func (m *Model) Array(fieldsAndWhere ...interface{}) ([]Value, error) func (m *Model) Value(fieldsAndWhere ...interface{}) (Value, error) func (m *Model) Count(where ...interface{}) (int, error) func (m *Model) CountColumn(column string) (int, error)
简要说明:
All
用于查询并返回多条记录的列表/数组。One
用于查询并返回单条记录。Array
用于查询指定字段列的数据,返回数组。Value
用于查询并返回一个字段值,往往需要结合Fields
方法使用。Count
用于查询并返回记录数。
此外,也可以看得到这四个方法定义中也支持条件参数的直接输入,参数类型与Where
方法一致。但需要注意,其中Array
和Value
方法的参数中至少应该输入字段参数。
使用示例:
// SELECT * FROM `user` WHERE `score`>60 Model("user").Where("score>?", 60).All() // SELECT * FROM `user` WHERE `score`>60 LIMIT 1 Model("user").Where("score>?", 60).One() // SELECT `name` FROM `user` WHERE `score`>60 Model("user").Fields("name").Where("score>?", 60).Array() // SELECT `name` FROM `user` WHERE `uid`=1 LIMIT 1 Model("user").Fields("name").Where("uid", 1).Value() // SELECT COUNT(1) FROM `user` WHERE `status` IN(1,2,3) Model("user").Where("status", g.Slice{1,2,3}).Count()
10 Comments
zhl
有获取指定两列数据为键值对的方法吗?,结果类似[column1=>column2, column1=>column2...]
刘海峰
select * from user
这种查询怎么写呀,我看了半天,gdb的都是需要where
刘海峰
我用WhereNotNull达到了效果。。。
dao.Demo.Ctx(ctx).WhereNotNull(dao.Demo.Columns().Id)
糖水不加糖
刘海峰
我的意思是使用链式操作,而不是写sql
糖水不加糖
没记错的话 where为空时强制校验 写无效条件 例如 1=1
刘海峰
是的,where不能为空,又不能不用where,我试了1=1,是可以的,谢谢大佬
keepeye
type *gdb.Model has no field or method FindAll
2.3.1版本
似乎从2.0开始就不支持 Find* 系列方法了?文档需要更新一下
krlin
这个 count 有bug吧,有时候返回条数是 0
krlin
这里的 count 查询从 go func() 中放出来就就正常了。因该是个 bug