英文:
How to set singular name for a table in gorm
问题
我想使用这个模型创建一个名为'user'的表。但是表名自动设置为'users'。我知道这是gorm的默认行为。但是我希望表名为'user'。
英文:
type user struct {
ID int
Username string `gorm:"size:255"`
Name string `gorm:"size:255"`
}
I want to create a table 'user' using this model. But the table name is automatically set to 'users'. I know it is gorm's default behavior. But I want the table name to be 'user'.
答案1
得分: 50
为你的结构体设置TableName
方法。
func (user) TableName() string {
return "user"
}
链接:https://gorm.io/docs/models.html#conventions
英文:
Set method TableName
for your struct.
func (user) TableName() string {
return "user"
}
答案2
得分: 21
Gorm内置了一个方法,可以在全局级别设置所有表的单数形式。
对于Gorm v1,你可以这样做:
db.SingularTable(true)
对于v2,稍微冗长一些:
db, err := gorm.Open(postgres.Open(connStr), &gorm.Config{
NamingStrategy: schema.NamingStrategy{
SingularTable: true,
},
})
英文:
Gorm has a in-built method for that that will be set in global level so all tables will be singular.
For gorm v1, you could do:
db.SingularTable(true)
For v2, it's a little more verbose:
db, err := gorm.Open(postgres.Open(connStr), &gorm.Config{
NamingStrategy: schema.NamingStrategy{
SingularTable: true,
},
})
答案3
得分: 0
要显式设置表名,您需要创建一个带有TableName
方法的接口Tabler
,然后为结构体创建一个接收器方法(在接口中定义):
type user struct {
ID int
Username string `gorm:"size:255"`
Name string `gorm:"size:255"`
}
type Tabler interface {
TableName() string
}
// TableName将User使用的表名覆盖为`profiles`
func (user) TableName() string {
return "user"
}
英文:
To explicitly set a table name, you would have to create an interface Tabler
with TableName
method, and then create a receiver method (defined in the interface) for the struct:
type user struct {
ID int
Username string `gorm:"size:255"`
Name string `gorm:"size:255"`
}
type Tabler interface {
TableName() string
}
// TableName overrides the table name used by User to `profiles`
func (user) TableName() string {
return "user"
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论