mirror of
https://github.com/tangpanqing/aorm.git
synced 2025-10-05 16:06:56 +08:00
100 lines
3.5 KiB
Go
100 lines
3.5 KiB
Go
package builder
|
|
|
|
import (
|
|
"github.com/tangpanqing/aorm/helper"
|
|
"reflect"
|
|
)
|
|
|
|
// Where 链式操作,以对象作为查询条件
|
|
func (b *Builder) Where(dest interface{}) *Builder {
|
|
typeOf := reflect.TypeOf(dest)
|
|
valueOf := reflect.ValueOf(dest)
|
|
|
|
//如果没有设置表名
|
|
if b.tableName == "" {
|
|
b.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()
|
|
b.whereList = append(b.whereList, WhereItem{Field: key, Opt: Eq, Val: val})
|
|
}
|
|
}
|
|
|
|
return b
|
|
}
|
|
|
|
// WhereArr 链式操作,以数组作为查询条件
|
|
func (b *Builder) WhereArr(whereList []WhereItem) *Builder {
|
|
b.whereList = append(b.whereList, whereList...)
|
|
return b
|
|
}
|
|
|
|
func (b *Builder) WhereEq(field interface{}, val interface{}, prefix ...string) *Builder {
|
|
b.whereList = append(b.whereList, WhereItem{getPrefixByField(field, prefix...), field, Eq, val})
|
|
return b
|
|
}
|
|
|
|
func (b *Builder) WhereNe(field interface{}, val interface{}, prefix ...string) *Builder {
|
|
b.whereList = append(b.whereList, WhereItem{getPrefixByField(field, prefix...), field, Ne, val})
|
|
return b
|
|
}
|
|
|
|
func (b *Builder) WhereGt(field interface{}, val interface{}, prefix ...string) *Builder {
|
|
b.whereList = append(b.whereList, WhereItem{getPrefixByField(field, prefix...), field, Gt, val})
|
|
return b
|
|
}
|
|
|
|
func (b *Builder) WhereGe(field interface{}, val interface{}, prefix ...string) *Builder {
|
|
b.whereList = append(b.whereList, WhereItem{getPrefixByField(field, prefix...), field, Ge, val})
|
|
return b
|
|
}
|
|
|
|
func (b *Builder) WhereLt(field interface{}, val interface{}, prefix ...string) *Builder {
|
|
b.whereList = append(b.whereList, WhereItem{getPrefixByField(field, prefix...), field, Lt, val})
|
|
return b
|
|
}
|
|
|
|
func (b *Builder) WhereLe(field interface{}, val interface{}, prefix ...string) *Builder {
|
|
b.whereList = append(b.whereList, WhereItem{getPrefixByField(field, prefix...), field, Le, val})
|
|
return b
|
|
}
|
|
|
|
func (b *Builder) WhereIn(field interface{}, val interface{}, prefix ...string) *Builder {
|
|
b.whereList = append(b.whereList, WhereItem{getPrefixByField(field, prefix...), field, In, val})
|
|
return b
|
|
}
|
|
|
|
func (b *Builder) WhereNotIn(field interface{}, val interface{}, prefix ...string) *Builder {
|
|
b.whereList = append(b.whereList, WhereItem{getPrefixByField(field, prefix...), field, NotIn, val})
|
|
return b
|
|
}
|
|
|
|
func (b *Builder) WhereBetween(field interface{}, val interface{}, prefix ...string) *Builder {
|
|
b.whereList = append(b.whereList, WhereItem{getPrefixByField(field, prefix...), field, Between, val})
|
|
return b
|
|
}
|
|
|
|
func (b *Builder) WhereNotBetween(field interface{}, val interface{}, prefix ...string) *Builder {
|
|
b.whereList = append(b.whereList, WhereItem{getPrefixByField(field, prefix...), field, NotBetween, val})
|
|
return b
|
|
}
|
|
|
|
func (b *Builder) WhereLike(field interface{}, val interface{}, prefix ...string) *Builder {
|
|
b.whereList = append(b.whereList, WhereItem{getPrefixByField(field, prefix...), field, Like, val})
|
|
return b
|
|
}
|
|
|
|
func (b *Builder) WhereNotLike(field interface{}, val interface{}, prefix ...string) *Builder {
|
|
b.whereList = append(b.whereList, WhereItem{getPrefixByField(field, prefix...), field, NotLike, val})
|
|
return b
|
|
}
|
|
|
|
func (b *Builder) WhereRaw(field interface{}, val interface{}, prefix ...string) *Builder {
|
|
b.whereList = append(b.whereList, WhereItem{getPrefixByField(field, prefix...), field, Raw, val})
|
|
return b
|
|
}
|