GORM将try 将CamelCase转换为snake_case,因为这是大多数数据库中表的常见命名约定.
骆驼到蛇的大小写转换也将应用于您的 case ,位于many2many
表名称注释上.例如:如果您使用AaaBbbCccDdd,您最终将得到一个名为aaa_bbb_ccc_ddd的连接表
要更改默认行为,您可以在GORM配置的命名策略中将NoLowerCase
值覆盖为true
.
package main
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/schema"
)
type User struct {
gorm.Model
Languages []*Language `gorm:"many2many:UserLanguages;"`
}
type Language struct {
gorm.Model
Name string
Users []*User `gorm:"many2many:UserLanguages;"`
}
func main() {
db, err := gorm.Open(sqlite.Open("mydb.db"), &gorm.Config{
NamingStrategy: schema.NamingStrategy{
NoLowerCase: true, // << HERE
},
})
if err != nil {
panic("failed to connect database")
}
db.AutoMigrate(&User{})
db.AutoMigrate(&Language{})
}
如果您确实需要覆盖JoinTableName方法(尽管您可能不需要这样做),您可以执行如下所示的操作,最终得到名为UserLanguages_OVERRIDE_HERE的连接表
type MyCustomNaming struct {
schema.NamingStrategy
}
func (MyCustomNaming) JoinTableName(table string) string {
return table + "_OVERRIDE_HERE"
}
func main() {
ns := MyCustomNaming{
NamingStrategy: schema.NamingStrategy{
NoLowerCase: true,
},
}
db, err := gorm.Open(sqlite.Open("mydb.db"), &gorm.Config{
NamingStrategy: ns,
})
...