diff --git a/chainable_api.go b/chainable_api.go index 8953413d5..8a6aea343 100644 --- a/chainable_api.go +++ b/chainable_api.go @@ -448,9 +448,10 @@ func (db *DB) Assign(attrs ...interface{}) (tx *DB) { // Unscoped allows queries to include records marked as deleted, // overriding the soft deletion behavior. // Example: -// var users []User -// db.Unscoped().Find(&users) -// // Retrieves all users, including deleted ones. +// +// var users []User +// db.Unscoped().Find(&users) +// // Retrieves all users, including deleted ones. func (db *DB) Unscoped() (tx *DB) { tx = db.getInstance() tx.Statement.Unscoped = true diff --git a/schema/field.go b/schema/field.go index a16c98ab0..f1ba7a164 100644 --- a/schema/field.go +++ b/schema/field.go @@ -12,6 +12,7 @@ import ( "time" "github.com/jinzhu/now" + "gorm.io/gorm/clause" "gorm.io/gorm/utils" ) @@ -919,10 +920,8 @@ func (field *Field) setupValuerAndSetter() { // struct scanner field.Set = func(ctx context.Context, value reflect.Value, v interface{}) (err error) { reflectV := reflect.ValueOf(v) - if !reflectV.IsValid() { + if !reflectV.IsValid() || reflectV.Kind() == reflect.Ptr && reflectV.IsNil() { field.ReflectValueOf(ctx, value).Set(reflect.New(field.FieldType).Elem()) - } else if reflectV.Kind() == reflect.Ptr && reflectV.IsNil() { - return } else if reflectV.Type().AssignableTo(field.FieldType) { field.ReflectValueOf(ctx, value).Set(reflectV) } else if reflectV.Kind() == reflect.Ptr {