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