diff --git a/database/gdb/gdb_model_hook.go b/database/gdb/gdb_model_hook.go index ca2702c40..fac0f4a7c 100644 --- a/database/gdb/gdb_model_hook.go +++ b/database/gdb/gdb_model_hook.go @@ -77,7 +77,7 @@ type HookInsertInput struct { type HookUpdateInput struct { internalParamHookUpdate Table string - Data interface{} + Data interface{} // Data can be type of: map[string]interface{}/string. You can use type assertion on `Data`. Condition string Args []interface{} } diff --git a/database/gdb/gdb_model_update.go b/database/gdb/gdb_model_update.go index f1be33829..4ac93bffc 100644 --- a/database/gdb/gdb_model_update.go +++ b/database/gdb/gdb_model_update.go @@ -44,27 +44,28 @@ func (m *Model) Update(dataAndWhere ...interface{}) (result sql.Result, err erro } var ( updateData = m.data + reflectInfo = reflection.OriginTypeAndKind(updateData) fieldNameUpdate = m.getSoftFieldNameUpdated() conditionWhere, conditionExtra, conditionArgs = m.formatCondition(false, false) ) - // Automatically update the record updating time. - if !m.unscoped && fieldNameUpdate != "" { - reflectInfo := reflection.OriginTypeAndKind(m.data) - switch reflectInfo.OriginKind { - case reflect.Map, reflect.Struct: - dataMap := m.db.ConvertDataForRecord(m.GetCtx(), m.data) - if fieldNameUpdate != "" { - dataMap[fieldNameUpdate] = gtime.Now().String() - } - updateData = dataMap + switch reflectInfo.OriginKind { + case reflect.Map, reflect.Struct: + dataMap := m.db.ConvertDataForRecord(m.GetCtx(), m.data) + // Automatically update the record updating time. + if !m.unscoped && fieldNameUpdate != "" { + dataMap[fieldNameUpdate] = gtime.Now().String() + } + updateData = dataMap - default: - updates := gconv.String(m.data) + default: + updates := gconv.String(m.data) + // Automatically update the record updating time. + if !m.unscoped && fieldNameUpdate != "" { if fieldNameUpdate != "" && !gstr.Contains(updates, fieldNameUpdate) { updates += fmt.Sprintf(`,%s='%s'`, fieldNameUpdate, gtime.Now().String()) } - updateData = updates } + updateData = updates } newData, err := m.filterDataForInsertOrUpdate(updateData) if err != nil {