在使用preload时gormDefaultTableNameHandler覆盖了结构体实现的tablename方法
在使用gorm的preload功能时,gorm会默认使用结构体实现的tablename方法来获取表名。如果想要自定义表名的话,可以通过覆盖gorm的DefaultTableNameHandler来实现。下面是一个示例:
// 定义一个结构体
type User struct {
ID uint
Name string
}
// 覆盖gorm的DefaultTableNameHandler
func TableNameHandler(db *gorm.DB, defaultTableName string) string {
return "my_table_name"
}
// 在初始化gorm的时候设置TableNameHandler
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
NamingStrategy: schema.NamingStrategy{
TableNameHandler: TableNameHandler,
},
})
// 使用preload时会使用TableNameHandler返回的表名
var users []User
db.Preload("Orders").Find(&users)
在上面的示例中,我们覆盖了gorm的DefaultTableNameHandler并返回了一个自定义的表名。当使用preload时,gorm会调用TableNameHandler来获取表名。这样就可以实现自定义表名的功能了。
原文地址: http://www.cveoy.top/t/topic/GGw 著作权归作者所有。请勿转载和采集!