diff --git a/base.go b/base.go index 1c50bf1..4809d44 100644 --- a/base.go +++ b/base.go @@ -157,5 +157,19 @@ func (b *BaseDao) setTxCondition(tx *gorm.DB, table string, optionFuncList ...Se tx = tx.Where(field+" < ?", value) } } + + // or 语句 + if nil != o.OR { + expression := "" + valList := make([]interface{}, 0) + for _, o := range o.OR { + if len(expression) > 0 { + expression = expression + " OR " + } + expression = expression + " " + o.Express + valList = append(valList, o.Value) + } + tx = tx.Where(expression, valList...) + } return tx } diff --git a/option.go b/option.go index 27b6b21..fffc337 100644 --- a/option.go +++ b/option.go @@ -14,6 +14,16 @@ package mysql // Date : 11:46 2022/5/15 type SetOption func(o *Option) +// ORCondition OR 条件 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 20:07 2022/7/23 +type ORCondition struct { + Express string `json:"express"` // 表达式 + Value string `json:"value"` // 绑定值 +} + // Option 扩展选项 // // Author : go_developer@163.com<白茶清欢> @@ -30,6 +40,7 @@ type Option struct { Like map[string]string `json:"like"` // like 语句 NotLike map[string]string `json:"not_like"` // not like 语句 NotEqual map[string]interface{} `json:"not_equal"` // != 语句 + OR []*ORCondition `json:"or"` // or 语句, or 和其他属性 and 关系, 内部 OR 关系 } // WithWhere 设置where条件 @@ -269,3 +280,17 @@ func WithBatchNotEqual(data map[string]interface{}) SetOption { } } } + +// WithOR 设置OR语句 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 20:03 2022/7/23 +func WithOR(orConditionList []*ORCondition) SetOption { + return func(o *Option) { + if nil == o.OR { + o.OR = make([]*ORCondition, 0) + } + o.OR = append(o.OR, orConditionList...) + } +}