mirror of
https://github.com/tangpanqing/aorm.git
synced 2025-10-05 16:06:56 +08:00
152 lines
3.2 KiB
Go
152 lines
3.2 KiB
Go
package builder
|
|
|
|
import (
|
|
"github.com/tangpanqing/aorm/helper"
|
|
"reflect"
|
|
)
|
|
|
|
// Having 链式操作,以对象作为筛选条件
|
|
func (ex *Builder) Having(dest interface{}) *Builder {
|
|
typeOf := reflect.TypeOf(dest)
|
|
valueOf := reflect.ValueOf(dest)
|
|
|
|
//如果没有设置表名
|
|
if ex.tableName == "" {
|
|
ex.tableName = getTableName(typeOf, valueOf)
|
|
}
|
|
|
|
for i := 0; i < typeOf.Elem().NumField(); i++ {
|
|
isNotNull := valueOf.Elem().Field(i).Field(0).Field(1).Bool()
|
|
if isNotNull {
|
|
key := helper.UnderLine(typeOf.Elem().Field(i).Name)
|
|
val := valueOf.Elem().Field(i).Field(0).Field(0).Interface()
|
|
ex.havingList = append(ex.havingList, WhereItem{Field: key, Opt: Eq, Val: val})
|
|
}
|
|
}
|
|
|
|
return ex
|
|
}
|
|
|
|
// HavingArr 链式操作,以数组作为筛选条件
|
|
func (ex *Builder) HavingArr(havingList []WhereItem) *Builder {
|
|
ex.havingList = append(ex.havingList, havingList...)
|
|
return ex
|
|
}
|
|
|
|
func (ex *Builder) HavingEq(field string, val interface{}) *Builder {
|
|
ex.havingList = append(ex.havingList, WhereItem{
|
|
Field: field,
|
|
Opt: Eq,
|
|
Val: val,
|
|
})
|
|
return ex
|
|
}
|
|
|
|
func (ex *Builder) HavingNe(field string, val interface{}) *Builder {
|
|
ex.havingList = append(ex.havingList, WhereItem{
|
|
Field: field,
|
|
Opt: Ne,
|
|
Val: val,
|
|
})
|
|
return ex
|
|
}
|
|
|
|
func (ex *Builder) HavingGt(field string, val interface{}) *Builder {
|
|
ex.havingList = append(ex.havingList, WhereItem{
|
|
Field: field,
|
|
Opt: Gt,
|
|
Val: val,
|
|
})
|
|
return ex
|
|
}
|
|
|
|
func (ex *Builder) HavingGe(field string, val interface{}) *Builder {
|
|
ex.havingList = append(ex.havingList, WhereItem{
|
|
Field: field,
|
|
Opt: Ge,
|
|
Val: val,
|
|
})
|
|
return ex
|
|
}
|
|
|
|
func (ex *Builder) HavingLt(field string, val interface{}) *Builder {
|
|
ex.havingList = append(ex.havingList, WhereItem{
|
|
Field: field,
|
|
Opt: Lt,
|
|
Val: val,
|
|
})
|
|
return ex
|
|
}
|
|
|
|
func (ex *Builder) HavingLe(field string, val interface{}) *Builder {
|
|
ex.havingList = append(ex.havingList, WhereItem{
|
|
Field: field,
|
|
Opt: Le,
|
|
Val: val,
|
|
})
|
|
return ex
|
|
}
|
|
|
|
func (ex *Builder) HavingIn(field string, val interface{}) *Builder {
|
|
ex.havingList = append(ex.havingList, WhereItem{
|
|
Field: field,
|
|
Opt: In,
|
|
Val: val,
|
|
})
|
|
return ex
|
|
}
|
|
|
|
func (ex *Builder) HavingNotIn(field string, val interface{}) *Builder {
|
|
ex.havingList = append(ex.havingList, WhereItem{
|
|
Field: field,
|
|
Opt: NotIn,
|
|
Val: val,
|
|
})
|
|
return ex
|
|
}
|
|
|
|
func (ex *Builder) HavingBetween(field string, val interface{}) *Builder {
|
|
ex.havingList = append(ex.havingList, WhereItem{
|
|
Field: field,
|
|
Opt: Between,
|
|
Val: val,
|
|
})
|
|
return ex
|
|
}
|
|
|
|
func (ex *Builder) HavingNotBetween(field string, val interface{}) *Builder {
|
|
ex.havingList = append(ex.havingList, WhereItem{
|
|
Field: field,
|
|
Opt: NotBetween,
|
|
Val: val,
|
|
})
|
|
return ex
|
|
}
|
|
|
|
func (ex *Builder) HavingLike(field string, val interface{}) *Builder {
|
|
ex.havingList = append(ex.havingList, WhereItem{
|
|
Field: field,
|
|
Opt: Like,
|
|
Val: val,
|
|
})
|
|
return ex
|
|
}
|
|
|
|
func (ex *Builder) HavingNotLike(field string, val interface{}) *Builder {
|
|
ex.havingList = append(ex.havingList, WhereItem{
|
|
Field: field,
|
|
Opt: NotLike,
|
|
Val: val,
|
|
})
|
|
return ex
|
|
}
|
|
|
|
func (ex *Builder) HavingRaw(field string, val interface{}) *Builder {
|
|
ex.havingList = append(ex.havingList, WhereItem{
|
|
Field: field,
|
|
Opt: Raw,
|
|
Val: val,
|
|
})
|
|
return ex
|
|
}
|