多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # QuerySeter ORM 以**QuerySeter**来组织查询,每个返回**QuerySeter**的方法都会获得一个新的**QuerySeter**对象。 基本使用方法: ~~~ o := orm.NewOrm() // 获取 QuerySeter 对象,user 为表名 qs := o.QueryTable("user") // 也可以直接使用对象作为表名 user := new(User) qs = o.QueryTable(user) // 返回 QuerySeter ~~~ ## 方法 QuerySeter 是高级查询使用的接口,我们来熟悉下他的接口方法 * type QuerySeter interface { * [Filter(string, …interface{}) QuerySeter](https://beego.me/docs/mvc/model/query.md#filter) * [Exclude(string, …interface{}) QuerySeter](https://beego.me/docs/mvc/model/query.md#exclude) * [SetCond(\*Condition) QuerySeter](https://beego.me/docs/mvc/model/query.md#setcond) * [Limit(int, …int64) QuerySeter](https://beego.me/docs/mvc/model/query.md#limit) * [Offset(int64) QuerySeter](https://beego.me/docs/mvc/model/query.md#offset) * [GroupBy(…string) QuerySeter](https://beego.me/docs/mvc/model/query.md#groupby) * [OrderBy(…string) QuerySeter](https://beego.me/docs/mvc/model/query.md#orderby) * [Distinct() QuerySeter](https://beego.me/docs/mvc/model/query.md#distinct) * [RelatedSel(…interface{}) QuerySeter](https://beego.me/docs/mvc/model/query.md#relatedsel) * [Count() (int64, error)](https://beego.me/docs/mvc/model/query.md#count) * [Exist() bool](https://beego.me/docs/mvc/model/query.md#exist) * [Update(Params) (int64, error)](https://beego.me/docs/mvc/model/query.md#update) * [Delete() (int64, error)](https://beego.me/docs/mvc/model/query.md#delete) * [PrepareInsert() (Inserter, error)](https://beego.me/docs/mvc/model/query.md#prepareinsert) * [All(interface{}, …string) (int64, error)](https://beego.me/docs/mvc/model/query.md#all) * [One(interface{}, …string) error](https://beego.me/docs/mvc/model/query.md#one) * [Values(\*\[\]Params, …string) (int64, error)](https://beego.me/docs/mvc/model/query.md#values) * [ValuesList(\*\[\]ParamsList, …string) (int64, error)](https://beego.me/docs/mvc/model/query.md#valueslist) * [ValuesFlat(\*ParamsList, string) (int64, error)](https://beego.me/docs/mvc/model/query.md#valuesflat) * } * 每个返回 QuerySeter 的 api 调用时都会新建一个 QuerySeter,不影响之前创建的。 * 高级查询使用 Filter 和 Exclude 来做常用的条件查询。囊括两种清晰的过滤规则:包含, 排除 # expr QuerySeter 中用于描述字段和 sql 操作符,使用简单的 expr 查询方法 字段组合的前后顺序依照表的关系,比如 User 表拥有 Profile 的外键,那么对 User 表查询对应的 Profile.Age 为条件,则使用`Profile__Age`注意,字段的分隔符号使用双下划线`__`,除了描述字段, expr 的尾部可以增加操作符以执行对应的 sql 操作。比如`Profile__Age__gt`代表 Profile.Age > 18 的条件查询。 注释后面将描述对应的 sql 语句,仅仅是描述 expr 的类似结果,并不代表实际生成的语句。 ~~~ qs.Filter("id", 1) // WHERE id = 1 qs.Filter("profile__age", 18) // WHERE profile.age = 18 qs.Filter("Profile__Age", 18) // 使用字段名和 Field 名都是允许的 qs.Filter("profile__age", 18) // WHERE profile.age = 18 qs.Filter("profile__age__gt", 18) // WHERE profile.age > 18 qs.Filter("profile__age__gte", 18) // WHERE profile.age >= 18 qs.Filter("profile__age__in", 18, 20) // WHERE profile.age IN (18, 20) qs.Filter("profile__age__in", 18, 20).Exclude("profile__lt", 1000) // WHERE profile.age IN (18, 20) AND NOT profile_id < 1000 ~~~ ## Operators操作符 当前支持的操作符号: * exact/iexact等于 * contains/icontains包含 * gt / gte大于 / 大于等于 * lt / lte小于 / 小于等于 * startswith/istartswith以…起始 * endswith/iendswith以…结束 * in * isnull 后面以`i`开头的表示:大小写不敏感