gorm/doc/models.md

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.