2.4 KiB
Change Log
v1.0
Breaking Changes
-
gorm.Open
return type*gorm.DB
instead ofgorm.DB
-
Updating will only update changed fields
Most applications won't be affected, only when you are changing updating values in callbacks like
BeforeSave
,BeforeUpdate
, you should usescope.SetColumn
then, for example:func (user *User) BeforeUpdate(scope *gorm.Scope) { if pw, err := bcrypt.GenerateFromPassword(user.Password, 0); err == nil { scope.SetColumn("EncryptedPassword", pw) // user.EncryptedPassword = pw // doesn't work, won't including EncryptedPassword field when updating } }
-
Soft delete's default querying scope will only check
deleted_at IS NULL
Before
db.Find(&user)
will generate querying SQL if user hasDeletedAt
fieldSELECT * FROM users WHERE deleted_at IS NULL OR deleted_at <= '0001-01-02'
Now won't include blank time check
<= '0001-01-02
anymore, will generat SQL like:SELECT * FROM users WHERE deleted_at IS NULL
So your application's
DeletedAt
field should not usetime.Time
as data type, need to use pointer*time.Time
or something likeNullTime
. If you are usinggorm.Model
, then you are good, nothing need to be change, just make sure all records using blank time fordeleted_at
has been set to NULL, sample migration script:import ( "github.com/jinzhu/now" ) func main() { var models = []interface{}{&User{}, &Image{}} for _, model := range models { db.Unscoped().Model(model).Where("deleted_at < ?", now.MustParse("0001-01-02")).Update("deleted_at", gorm.Expr("NULL")) } }
-
New ToDBName logic
Before when GORM convert Struct, Field's name to db name, only those common initialisms from golint like
HTTP
,URI
are special handled.So field
HTTP
's db name will behttp
noth_t_t_p
, but some other initialisms likeSKU
that not in golint, it's db name will bes_k_u
, this release fixed this, any upper case initialisms should be converted correctly.If your applications using some upper case initialisms which doesn't exist in golint, you need to overwrite generated column name with tag, like
sql:"column:s_k_u"
, or alert your database's column name according to new logic