创建记录
user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
db.NewRecord(user)
db.Create(&user)
db.NewRecord(user)
|
默认值
你可以通过 tag 定义字段的默认值,比如:
type Animal struct { ID int64 Name string `gorm:"default:'galeone'"` Age int64 }
|
生成的 SQL 语句会排除没有值或值为 零值 的字段。 将记录插入到数据库后,Gorm会从数据库加载那些字段的值。
var animal = Animal{Age: 99, Name: ""} db.Create(&animal)
|
注意 所有字段的零值, 比如 0
, ''
, false
或者其它 零值,都不会保存到数据库内,但会使用他们的默认值。 如果你想避免这种情况,可以考虑使用指针或实现 Scanner/Valuer 接口,比如:
type User struct { gorm.Model Name string Age *int `gorm:"default:18"` }
type User struct { gorm.Model Name string Age sql.NullInt64 `gorm:"default:18"` }
|
在Hooks中设置字段值
如果你想在BeforeCreate
hook 中修改字段的值,可以使用scope.SetColumn
,例如:
func (user *User) BeforeCreate(scope *gorm.Scope) error { scope.SetColumn("ID", uuid.New()) return nil }
|
扩展创建选项
db.Set("gorm:insert_option", "ON CONFLICT").Create(&product)
|