GORM主鍵、表名、列名的約定

字號+ 編輯: Snake 修訂: 科学鼠辈 來源: 原创 2023-09-12 我要說兩句(0)

GORM默認會使用名爲ID的字段作爲表的主鍵。表名默認就是結搆體名稱的複數。列名由字段名稱進行下劃線分割來生成。

主键(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`
}

 

閲完此文,您的感想如何?
  • 有用

    1

  • 沒用

    0

  • 開心

    0

  • 憤怒

    0

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: PHP+JS聊天群

相關課文
  • GO語言GORM如何更新字段

  • gorm如何創建記錄與模型定義需要注意什麽

  • gorm一般查詢與高級查詢

  • GORM時間戳跟蹤及CURD(增刪改查)

我要說說
網上賓友點評