There is no data to update when updating data, the update time should not change
This commit is contained in:
		
							parent
							
								
									7701c88507
								
							
						
					
					
						commit
						01dd7167a9
					
				@ -165,6 +165,7 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) {
 | 
			
		||||
 | 
			
		||||
	switch value := updatingValue.Interface().(type) {
 | 
			
		||||
	case map[string]interface{}:
 | 
			
		||||
		var updateAtFieldName string
 | 
			
		||||
		set = make([]clause.Assignment, 0, len(value))
 | 
			
		||||
 | 
			
		||||
		keys := make([]string, 0, len(value))
 | 
			
		||||
@ -206,6 +207,7 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) {
 | 
			
		||||
						now := stmt.DB.NowFunc()
 | 
			
		||||
						assignValue(field, now)
 | 
			
		||||
 | 
			
		||||
						updateAtFieldName = field.DBName
 | 
			
		||||
						if field.AutoUpdateTime == schema.UnixNanosecond {
 | 
			
		||||
							set = append(set, clause.Assignment{Column: clause.Column{Name: field.DBName}, Value: now.UnixNano()})
 | 
			
		||||
						} else if field.AutoUpdateTime == schema.UnixMillisecond {
 | 
			
		||||
@ -219,9 +221,14 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) {
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		// This method only works if there is only one AutoUpdateTime field
 | 
			
		||||
		if len(set) == 1 && set[0].Column.Name == updateAtFieldName {
 | 
			
		||||
			return set[0:0]
 | 
			
		||||
		}
 | 
			
		||||
	default:
 | 
			
		||||
		switch updatingValue.Kind() {
 | 
			
		||||
		case reflect.Struct:
 | 
			
		||||
			var updateAtFieldName string
 | 
			
		||||
			set = make([]clause.Assignment, 0, len(stmt.Schema.FieldsByDBName))
 | 
			
		||||
			for _, dbName := range stmt.Schema.DBNames {
 | 
			
		||||
				field := stmt.Schema.LookUpField(dbName)
 | 
			
		||||
@ -229,6 +236,7 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) {
 | 
			
		||||
					if v, ok := selectColumns[field.DBName]; (ok && v) || (!ok && (!restricted || (!stmt.SkipHooks && field.AutoUpdateTime > 0))) {
 | 
			
		||||
						value, isZero := field.ValueOf(updatingValue)
 | 
			
		||||
						if !stmt.SkipHooks && field.AutoUpdateTime > 0 {
 | 
			
		||||
							updateAtFieldName = field.DBName
 | 
			
		||||
							if field.AutoUpdateTime == schema.UnixNanosecond {
 | 
			
		||||
								value = stmt.DB.NowFunc().UnixNano()
 | 
			
		||||
							} else if field.AutoUpdateTime == schema.UnixMillisecond {
 | 
			
		||||
@ -252,6 +260,10 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) {
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			// This method only works if there is only one AutoUpdateTime field
 | 
			
		||||
			if len(set) == 1 && set[0].Column.Name == updateAtFieldName {
 | 
			
		||||
				return set[0:0]
 | 
			
		||||
			}
 | 
			
		||||
		default:
 | 
			
		||||
			stmt.AddError(gorm.ErrInvalidData)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user