mirror of https://github.com/go-gorm/gorm.git
2.9 KiB
2.9 KiB
Models
Model Defination
type User struct {
gorm.Model
Birthday time.Time
Age int
Name string `sql:"size:255"` // Default size for string is 255, you could reset it with this tag
Num int `sql:"AUTO_INCREMENT"`
IgnoreMe int `sql:"-"` // Ignore this field
}
Conventions & Overriding Conventions
gorm.Model
struct
Gorm has defined struct gorm.Model
, which could be embeded in your models, it will add fields ID
, CreatedAt
, UpdatedAt
, DeletedAt
to your model
// Model's definition
type Model struct {
ID uint `gorm:"primary_key"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt *time.Time
}
Table name is the pluralized version of struct name
type User struct {} // default table name is `users`
// set User's table name to be `profiles
type (User) TableName() string {
return "profiles"
}
func (u User) TableName() string {
if u.Role == "admin" {
return "admin_users"
} else {
return "users"
}
}
// Disable table name's pluralization globally
db.SingularTable(true) // if set this to true, `User`'s default table name will be `user`, table name setted with `TableName` won't be affected
Column name is the snake case of field's name
type User struct {
ID uint // column name will be `id`
Name string // column name will be `name`
Birthday time.Time // column name will be `birthday`
CreatedAt time.Time // column name will be `created_at`
}
type Animal struct {
AnimalId int64 `gorm:"column:beast_id"` // set column name to `beast_id`
Birthday time.Time `gorm:"column:day_of_the_beast"` // set column name to `day_of_the_beast`
Age int64 `gorm:"column:age_of_the_beast"` // set column name to `age_of_the_beast`
}
Field ID
as primary key
type User struct {
ID uint // field named `ID` is the default primary key for `User`
Name string
}
// your could also use tag `primary_key` to set other field as primary key
type Animal struct {
AnimalId int64 `gorm:"primary_key"` // set AnimalId to be primary key
Name string
Age int64
}
Field CreatedAt
used to store record's created time
Create records having CreatedAt
field will set it to current time.
db.Create(&user) // will set `CreatedAt` to current time
// To change its value, you could use `Update`
db.Model(&user).Update("CreatedAt", time.Now())
Use UpdatedAt
used to store record's updated time
Save records having UpdatedAt
field will set it to current time.
db.Save(&user) // will set `UpdatedAt` to current time
db.Model(&user).Update("name", "jinzhu") // will set `UpdatedAt` to current time
Use DeletedAt
to store record's deleted time if field exists
Delete records having DeletedAt
field, it won't delete the record from database, but will set field DeletedAt
's value to current time.