Files
2021-09-28 11:47:19 +08:00

135 lines
2.6 KiB
Go

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
}