Documentation ¶
Index ¶
- Variables
- func New(pagination Pagination) gin.HandlerFunc
- func PaginationScope(query *PaginationQuery, options ...Option) func(db *gorm.DB) *gorm.DB
- type CustomeParser
- type Option
- type Pagination
- type PaginationQuery
- type PaginationQueryDB
- type RawQuery
- type SearchGroup
- type SearchRelation
- type SearchTerm
Constants ¶
This section is empty.
Variables ¶
var ComparisionMap = map[string]string{
"gt": ">",
"ge": ">=",
"lt": "<",
"le": "<=",
"eq": "=",
"ne": "!=",
"in": "in",
"not_in": "not in",
}
var PaginationQueryContextKey = "PaginationQuery"
var RequestQueryPrefix = "search"
RequestQueryPrefix 参数前缀, 用于`PaginationQuery.SearchGroup`和其他参数区分
Functions ¶
func New ¶
func New(pagination Pagination) gin.HandlerFunc
PaginationParser 兼容gin中间件 从`gin.Context`中解析`PaginationQuery` url例子: page=1&&size=10&&search.1.key=age&&search.1.value=20&&search.2.key=gender&&search.2.value=0&&orderfield=age&&orderby=desc&&search.1.exactly=true&&search.2.exactly=false
func PaginationScope ¶
PaginationScope 解析PaginationQuery到gorm.DB Scopes 示例:
Query := &PaginationQuery{}
查询例子:
var result []yourModel DB.Scopes(PaginationScope(Query)).Find(&result)
查询总数示例:
var c int DB.Scopes(PaginationScope(Query, Count)).Count(&c)
Types ¶
type CustomeParser ¶
type CustomeParser struct{}
func (*CustomeParser) Parser ¶
func (*CustomeParser) Parser(c *gin.Context) *PaginationQuery
Parser 建议自己实现分页解析接口 可以自定义解析GET/POST参数,此处以GET为例子
type Pagination ¶
type Pagination interface {
Parser(c *gin.Context) *PaginationQuery
}
Pagination 实现这个接口,把前端传过来的参数解析成需要的`PaginationQuery` 接口的`Parse`可以自定义足够复杂,相对应前端需要传的参数越多,该方法的解析越复杂
type PaginationQuery ¶
type PaginationQuery struct { PageSize int PageNum int // OrderBy 小写的字段名称 OrderBy string // Order 默认是'desc', 可选的: 'desc', 'asc' Order string // Limit 当指定pagesize时, limit参数是无效的 Limit int // SearchGroup 其他搜索条件, 各个查询组之间是AND关系 Search []SearchGroup // Scope 仅在复杂查询时候使用(包含多个表查询的时候) // 一般来说, Scope是表的名字, 用以表明哪个表用作复杂的匹配 // 例如: join多个表有相同的字段名的时候 Scope string }
PaginationQuery 分页查询
type PaginationQueryDB ¶
type PaginationQueryDB struct { DB *gorm.DB Query *PaginationQuery }
PaginationQueryDB 包含gorm.DB的结构体
func (*PaginationQueryDB) ParseLimit ¶
func (d *PaginationQueryDB) ParseLimit() *PaginationQueryDB
ParseLimit 解析Limit
func (*PaginationQueryDB) ParseOrder ¶
func (d *PaginationQueryDB) ParseOrder() *PaginationQueryDB
ParseOrder 解析排序
func (*PaginationQueryDB) ParsePagination ¶
func (d *PaginationQueryDB) ParsePagination() *PaginationQueryDB
ParsePagination 解析分页条件
func (*PaginationQueryDB) ParseQuery ¶
func (d *PaginationQueryDB) ParseQuery() *PaginationQueryDB
ParseQuery 解析查询条件
type SearchGroup ¶
type SearchGroup struct { SearchTerm // isChildQuery 是否包含子查询 IsChildQuery bool // ChildSearch子查询,嵌套搜索, 仅仅当isChildQuery是true的时候有效 ChildSearch []SearchTerm // ChildRelation, 子查询多个条件之间的关系,仅仅当isChildQuery是true的时候有效,默认值是AND ChildRelation SearchRelation }
SearchGroup 查询组定义 有子查询(ChildSearch) IsChildQuery=true的情况下,会忽略该Search里的查询直接查询子查询
type SearchRelation ¶
type SearchRelation int
SearchRelation 搜索查询添加 And或者Or
const ( ChildSearchAnd SearchRelation = iota ChildSearchOr )