yjp 3 ヶ月 前
コミット
f52463d5c7
1 ファイル変更27 行追加25 行削除
  1. 27 25
      convenient/entity_crud/service.go

+ 27 - 25
convenient/entity_crud/service.go

@@ -326,34 +326,36 @@ func Query[O any](tableName string, orderBy string, stringFieldQueryCondition st
 				}
 
 				if !hasDeal {
-					fieldValueType := reflect.TypeOf(field.Value)
-					if fieldValueType.Kind() != reflect.String {
-						conditions.Equal(field.ColumnName, field.Value)
-					} else {
-						stringValue, ok := field.Value.(string)
-						if !ok {
-							return errResponse, errors.New("字符串字段值类型错误")
-						}
+					fieldValue := reflect.ValueOf(field.Value)
+					if !fieldValue.IsZero() {
+						if fieldValue.Type().Kind() != reflect.String {
+							conditions.Equal(field.ColumnName, field.Value)
+						} else {
+							stringValue, ok := field.Value.(string)
+							if !ok {
+								return errResponse, errors.New("字符串字段值类型错误")
+							}
 
-						queryCondition := stringFieldQueryCondition
-						if customStringFieldQueryCondition != nil {
-							custom, ok := customStringFieldQueryCondition[field.FieldName]
-							if ok {
-								queryCondition = custom
+							queryCondition := stringFieldQueryCondition
+							if customStringFieldQueryCondition != nil {
+								custom, ok := customStringFieldQueryCondition[field.FieldName]
+								if ok {
+									queryCondition = custom
+								}
 							}
-						}
 
-						switch queryCondition {
-						case StringFieldQueryConditionEqual:
-							conditions.Equal(field.ColumnName, stringValue)
-						case StringFieldQueryConditionTrimSpaceEqual:
-							conditions.Equal(field.ColumnName, strings.TrimSpace(stringValue))
-						case StringFieldQueryConditionLike:
-							conditions.Like(field.ColumnName, "%"+stringValue+"%")
-						case StringFieldQueryConditionTrimSpaceLike:
-							conditions.Like(field.ColumnName, "%"+strings.TrimSpace(stringValue)+"%")
-						default:
-							conditions.Equal(field.ColumnName, stringValue)
+							switch queryCondition {
+							case StringFieldQueryConditionEqual:
+								conditions.Equal(field.ColumnName, stringValue)
+							case StringFieldQueryConditionTrimSpaceEqual:
+								conditions.Equal(field.ColumnName, strings.TrimSpace(stringValue))
+							case StringFieldQueryConditionLike:
+								conditions.Like(field.ColumnName, "%"+stringValue+"%")
+							case StringFieldQueryConditionTrimSpaceLike:
+								conditions.Like(field.ColumnName, "%"+strings.TrimSpace(stringValue)+"%")
+							default:
+								conditions.Equal(field.ColumnName, stringValue)
+							}
 						}
 					}
 				}