主鍵(Primary Key)
GORM默認會使用名爲ID的字段作爲表的主鍵。
type User struct {
ID string // 名爲`ID`的字段會默認作爲表的主鍵
Name string
}
// 使用`AnimalID`作爲主鍵
type Animal struct {
AnimalID int64 `gorm:"primary_key"`
Name string
Age int64
}表名(Table Name)
表名默認就是結構體名稱的複數,例如:
type User struct {} // 默認表名是`users`
// 將User的表名設置爲`profiles`
func (user) TableName() string {
return "profiles"
}
func (u User) TableName() string {
If u.Role == "admin" {
return "admin_users"
} else {
return "users"
}
}
// 禁用默認表名的複數形式,如果設置爲true,則`User`的默認表名是`user`
db.SingularTable(true)也可以通過Table()指定表名:
// 使用User結構體創建名爲`deleted_users`的表
db.Table("deleted_users").CreateTable(&User{})
var deleted_users []user
db.Table("deleted_users").Find(&deleted_users)
// SELECT * FROM deleted_users;
db.Table("deleted_users").Where("name = ?","jinzhu").Delete()
// DELETE FROM deleted_users WHRER name = 'jinzhu';
GORM還支持更改默認表名稱槼則:
gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
return "prefix_" + defaultTableName;
}列名(Column Name)
列名由字段名稱進行下劃線分割來生成。
type User struct {
ID unit // column name is `id`
Name string // column name is `name`
Birthday string // comumn name is `birthday`
CreateAt time.Time // column name is `created_at`
}可以使用結構體tag指定列名:
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`
}