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 it will check
deleted_at
less than0001-01-02
also to exclude blank time, like:SELECT * FROM users WHERE deleted_at IS NULL OR deleted_at <= '0001-01-02'
But it is not necessary if you are using type
*time.Time
for your model’sDeletedAt
, which has been used bygorm.Model
, so below SQl is enoughSELECT * FROM users WHERE deleted_at IS NULL
So if you are using
gorm.Model
, then you are good, nothing need to be change, just make sure all records having blank time fordeleted_at
set toNULL
, sample migrate 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
, which looks ugly, 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 default column name with tag, like
gorm:"column:s_k_u"
, or alert your database’s column name according to new logicError
RecordNotFound
has been renamed toErrRecordNotFound
mssql
driver has been moved out from default drivers, import it withimport _ "github.com/jinzhu/gorm/dialects/mssql"
Hstore
has been moved to packagegithub.com/jinzhu/gorm/dialects/postgres