package model import ( "fmt" "strings" ) // ModelWhere type ModelWhere struct { Condition string `json:"condition"` // 条件 Value interface{} `json:"value"` // 内容 } // ModelOrder type ModelOrder struct { Field string `json:"field"` // 字段值 Mode OrderMode `json:"mode"` // 排序模式 } // ModelWhereOrder type ModelWhereOrder struct { Where *ModelWhere Order *ModelOrder } // OrderMode type OrderMode string const ( // OrderModeToAsc asc OrderModeToAsc = "asc" // OrderModeToDesc desc OrderModeToDesc = "desc" ) // NewWhere where func NewWhere(filed string, value interface{}) *ModelWhere { return &ModelWhere{ Condition: filed + " = ?", Value: value, } } // NewWhereLike like where func NewWhereLike(filed string, value interface{}) *ModelWhere { return &ModelWhere{ Condition: filed + " LIKE ?", Value: "%" + fmt.Sprintf("%v", value) + "%", } } func NewWhereIn(filed string, value interface{}) *ModelWhere { return &ModelWhere{ Condition: filed + " IN ?", Value: value, } } func NewWhereNotIn(filed string, value interface{}) *ModelWhere { return &ModelWhere{ Condition: filed + " NOT IN ?", Value: value, } } func NewWhereCondition(filed, condition string, value interface{}) *ModelWhere { return &ModelWhere{ Condition: filed + " " + condition + " ?", Value: value, } } func NewWhereValue(value interface{}) *ModelWhere { return &ModelWhere{ Condition: "", Value: value, } } func NewWhereFindInSet(filed string, value interface{}) *ModelWhere { return &ModelWhere{ Condition: fmt.Sprintf("FIND_IN_SET(?, %s)", filed), Value: value, } } func NewWhereSectionAt(filed string, value []string) []*ModelWhere { return []*ModelWhere{ &ModelWhere{ Condition: filed + " >= ?", Value: value[0], }, &ModelWhere{ Condition: filed + " <= ?", Value: value[1], }, } } func NewWhereSectionTime(filed string, value []string) []*ModelWhere { return []*ModelWhere{ &ModelWhere{ Condition: filed + " >= ?", Value: value[0] + " 00:00:00", }, &ModelWhere{ Condition: filed + " <= ?", Value: value[1] + " 23:59:59", }, } } // NewOrder order Asc Or Desc func NewOrder(filed string, order OrderMode) *ModelOrder { return &ModelOrder{Field: filed, Mode: order} } // NewOrderSplit param to split for order Asc Or Desc func NewOrderSplit(param string) *ModelOrder { params := strings.Split(param, "-") if len(params) <= 1 { return nil } order := new(ModelOrder) order.Field = params[0] order.Mode = OrderModeToAsc if params[1] == OrderModeToDesc { order.Mode = OrderModeToDesc } return order }