From bce40e6d6a16c3c5775f036425feec9fc6d039d5 Mon Sep 17 00:00:00 2001 From: yrong1997 Date: Sun, 31 Jan 2021 13:39:00 +0800 Subject: [PATCH] Add field tag to ignore migration --- .gitignore | 1 + migrator/migrator.go | 2 +- schema/field.go | 5 +++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index c14d6005..e1b9ecea 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ TODO* documents coverage.txt _book +.idea diff --git a/migrator/migrator.go b/migrator/migrator.go index 91dd8e83..4e5051cf 100644 --- a/migrator/migrator.go +++ b/migrator/migrator.go @@ -396,7 +396,7 @@ func (m Migrator) MigrateColumn(value interface{}, field *schema.Field, columnTy } } - if alterColumn { + if alterColumn && !field.IgnoreMigration { return m.DB.Migrator().AlterColumn(value, field.Name) } diff --git a/schema/field.go b/schema/field.go index 17cc6c43..77c0b47a 100644 --- a/schema/field.go +++ b/schema/field.go @@ -70,6 +70,7 @@ type Field struct { ReflectValueOf func(reflect.Value) reflect.Value ValueOf func(reflect.Value) (value interface{}, zero bool) Set func(reflect.Value, interface{}) error + IgnoreMigration bool } func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field { @@ -188,6 +189,10 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field { field.Comment = val } + if _, ok := field.TagSettings["IGNOREMIGRATION"]; ok { + field.IgnoreMigration = true + } + // default value is function or null or blank (primary keys) skipParseDefaultValue := strings.Contains(field.DefaultValue, "(") && strings.Contains(field.DefaultValue, ")") || strings.ToLower(field.DefaultValue) == "null" || field.DefaultValue == ""