api2sql基础的能力 #8
							
								
								
									
										69
									
								
								base.go
									
									
									
									
									
								
							
							
						
						
									
										69
									
								
								base.go
									
									
									
									
									
								
							@ -199,7 +199,72 @@ func (b *BaseDao) setTxCondition(tx *gorm.DB, optionFuncList ...SetOption) *gorm
 | 
				
			|||||||
			tx = tx.Offset(o.Offset)
 | 
								tx = tx.Offset(o.Offset)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	sqlBlockList := make([]string, 0)
 | 
						// in 语句
 | 
				
			||||||
 | 
						if nil != o.In {
 | 
				
			||||||
 | 
							tx = tx.Where(o.In)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// not in 语句
 | 
				
			||||||
 | 
						if nil != o.NotIn {
 | 
				
			||||||
 | 
							for field, value := range o.NotIn {
 | 
				
			||||||
 | 
								tx = tx.Where(field+" NOT IN ? ", value)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// like 语句
 | 
				
			||||||
 | 
						if nil != o.Like {
 | 
				
			||||||
 | 
							for field, value := range o.Like {
 | 
				
			||||||
 | 
								tx = tx.Where(field+" LIKE ? ", "%"+value+"%")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// NOT LIKE 语句
 | 
				
			||||||
 | 
						if nil != o.NotLike {
 | 
				
			||||||
 | 
							for field, value := range o.NotLike {
 | 
				
			||||||
 | 
								tx = tx.Where(field+" NOT LIKE ? ", "%"+value+"%")
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// >=
 | 
				
			||||||
 | 
						if nil != o.Start {
 | 
				
			||||||
 | 
							for field, value := range o.Start {
 | 
				
			||||||
 | 
								tx = tx.Where(field+" >= ?", value)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// <
 | 
				
			||||||
 | 
						if nil != o.End {
 | 
				
			||||||
 | 
							for field, value := range o.End {
 | 
				
			||||||
 | 
								tx = tx.Where(field+" < ?", value)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// between
 | 
				
			||||||
 | 
						for field, betweenVal := range o.Between {
 | 
				
			||||||
 | 
							tx = tx.Where("`"+field+"` BETWEEN ? AND ?", betweenVal[0], betweenVal[1])
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// not between
 | 
				
			||||||
 | 
						for field, notBetweenVal := range o.NotBetween {
 | 
				
			||||||
 | 
							tx = tx.Where("`"+field+"` NOT BETWEEN ? AND ?", notBetweenVal[0], notBetweenVal[1])
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 排序
 | 
				
			||||||
 | 
						for _, orderRule := range o.Order {
 | 
				
			||||||
 | 
							tx = tx.Order(orderRule)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// or 语句
 | 
				
			||||||
 | 
						if nil != o.OR {
 | 
				
			||||||
 | 
							for _, itemOr := range o.OR {
 | 
				
			||||||
 | 
								orOption := &Option{}
 | 
				
			||||||
 | 
								for _, fn := range itemOr {
 | 
				
			||||||
 | 
									fn(orOption)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								orSql, orBindVal := optionToSql(orOption)
 | 
				
			||||||
 | 
								tx.Or(orSql, orBindVal)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						/*sqlBlockList := make([]string, 0)
 | 
				
			||||||
	bindValueList := make([]any, 0)
 | 
						bindValueList := make([]any, 0)
 | 
				
			||||||
	sql, bindVal := optionToSql(o)
 | 
						sql, bindVal := optionToSql(o)
 | 
				
			||||||
	tx.Or(sql, bindVal...)
 | 
						tx.Or(sql, bindVal...)
 | 
				
			||||||
@ -212,6 +277,6 @@ func (b *BaseDao) setTxCondition(tx *gorm.DB, optionFuncList ...SetOption) *gorm
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		orSql, orBindVal := optionToSql(orOption)
 | 
							orSql, orBindVal := optionToSql(orOption)
 | 
				
			||||||
		tx.Or(orSql, orBindVal...)
 | 
							tx.Or(orSql, orBindVal...)
 | 
				
			||||||
	}
 | 
						}*/
 | 
				
			||||||
	return tx
 | 
						return tx
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										41
									
								
								option.go
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								option.go
									
									
									
									
									
								
							@ -38,6 +38,8 @@ type Option struct {
 | 
				
			|||||||
	In         map[string]any    `json:"in"`          // in语句
 | 
						In         map[string]any    `json:"in"`          // in语句
 | 
				
			||||||
	NotIn      map[string]any    `json:"not_in"`      // not in语句
 | 
						NotIn      map[string]any    `json:"not_in"`      // not in语句
 | 
				
			||||||
	Where      map[string]any    `json:"where"`       // where 条件
 | 
						Where      map[string]any    `json:"where"`       // where 条件
 | 
				
			||||||
 | 
						Between    map[string][2]any `json:"between"`     // between 条件
 | 
				
			||||||
 | 
						NotBetween map[string][2]any `json:"not_between"` // not between 条件
 | 
				
			||||||
	Start      map[string]any    `json:"start"`       // >= 条件
 | 
						Start      map[string]any    `json:"start"`       // >= 条件
 | 
				
			||||||
	End        map[string]any    `json:"end"`         // < 条件
 | 
						End        map[string]any    `json:"end"`         // < 条件
 | 
				
			||||||
	Like       map[string]string `json:"like"`        // like 语句
 | 
						Like       map[string]string `json:"like"`        // like 语句
 | 
				
			||||||
@ -488,6 +490,17 @@ func optionToSql(o *Option) (sqlBuildResult string, bindValue []any) {
 | 
				
			|||||||
		bindValue = append(bindValue, fieldValue)
 | 
							bindValue = append(bindValue, fieldValue)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// between
 | 
				
			||||||
 | 
						for field, betweenVal := range o.Between {
 | 
				
			||||||
 | 
							sqlBuildResultBlockList = append(sqlBuildResultBlockList, "`"+field+"` BETWEEN ? AND ?")
 | 
				
			||||||
 | 
							bindValue = append(bindValue, betweenVal[0], betweenVal[1])
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// not between
 | 
				
			||||||
 | 
						for field, notBetweenVal := range o.NotBetween {
 | 
				
			||||||
 | 
							sqlBuildResultBlockList = append(sqlBuildResultBlockList, "`"+field+"` NOT BETWEEN ? AND ?")
 | 
				
			||||||
 | 
							bindValue = append(bindValue, notBetweenVal[0], notBetweenVal[1])
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if len(bindValue) > 0 {
 | 
						if len(bindValue) > 0 {
 | 
				
			||||||
		sqlBuildResult = strings.Join(sqlBuildResultBlockList, " AND ")
 | 
							sqlBuildResult = strings.Join(sqlBuildResultBlockList, " AND ")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -513,6 +526,34 @@ func parseInSql(fieldValue any) (string, []any) {
 | 
				
			|||||||
	return strings.Join(placeholderList, ","), dataList
 | 
						return strings.Join(placeholderList, ","), dataList
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// WithBetween between 语句
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Author : go_developer@163.com<白茶清欢>
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Date : 15:52 2024/8/23
 | 
				
			||||||
 | 
					func WithBetween(field string, left any, right any) SetOption {
 | 
				
			||||||
 | 
						return func(o *Option) {
 | 
				
			||||||
 | 
							if nil == o.Between {
 | 
				
			||||||
 | 
								o.Between = map[string][2]any{}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							o.Between[field] = [2]any{left, right}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// WithNotBetween not between 语句
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Author : go_developer@163.com<白茶清欢>
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Date : 15:52 2024/8/23
 | 
				
			||||||
 | 
					func WithNotBetween(field string, left any, right any) SetOption {
 | 
				
			||||||
 | 
						return func(o *Option) {
 | 
				
			||||||
 | 
							if nil == o.NotBetween {
 | 
				
			||||||
 | 
								o.NotBetween = map[string][2]any{}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							o.NotBetween[field] = [2]any{left, right}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// WithAnyCondition 设置任意查询条件, 仅 where 子句 in / not in / like / not like / == / !=
 | 
					// WithAnyCondition 设置任意查询条件, 仅 where 子句 in / not in / like / not like / == / !=
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Author : go_developer@163.com<白茶清欢>
 | 
					// Author : go_developer@163.com<白茶清欢>
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user