GORM Preload 自定义表名:覆盖 DefaultTableNameHandler
在使用 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 来获取表名。这样就可以实现自定义表名的功能了。
原文地址: https://www.cveoy.top/t/topic/lW6y 著作权归作者所有。请勿转载和采集!