在使用 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 来获取表名。这样就可以实现自定义表名的功能了。

GORM Preload 自定义表名:覆盖 DefaultTableNameHandler

原文地址: https://www.cveoy.top/t/topic/lW6y 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录