gorm的SingularTable作用
2021-06-23 本文已影响0人
戈壁堂
Mapping between Gorm and database (singular and plural) table structures
数据库连接设置了以下属性的含义——对应变量在model_struct.go
文件中的GetModelStruct()
方法和TableName(db *DB) string
中应用
db.SingularTable(true)
假设定义了——
type User struct {
Id int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
type Users struct {
Id int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
- 数据库中没有
users
表也没有user
表,执行DB.AutoMigrate(&User{})
或DB.AutoMigrate(&Users{})
——- 没有上述设置,则都自动创建
users
表(自动设置为复数形式); - 有上述设置时,则自动创建
user
表和users
(遵守单数形式)
- 没有上述设置,则都自动创建
- 数据库中只有
users
表,没有db.SingularTable(true)
设置
以下操作会将数据都添加到users
表;设置之后,第一行将保存提示user
表不存在
DB.Create(&User{Name: "Li", Age: 5}) //
DB.Create(&Users{Name: "Li", Age: 5}) //
- 数据库中只有
user
表,没有db.SingularTable(true)
设置,相同的添加数据的操作都会失败,提示users
表不存在
DB.Create(&User{Name: "Li", Age: 5}) // Table 'users' doesn't exist
DB.Create(&Users{Name: "Li", Age: 5}) // Table 'users' doesn't exist
总结:gorm默认使用复数映射,go代码的单数、复数struct形式都匹配到复数表中:创建表、添加数据时都是如此。指定了db.SingularTable(true)
之后,进行严格匹配。