如何从gorm中的模型中获取表名?

rur96b6h  于 12个月前  发布在  Go
关注(0)|答案(4)|浏览(166)

是否可以获取模型的表名?我看到可以从 ModelStruct 获取,但我不知道如何正确操作。我没有找到此结构的任何初始化。

user := User{}
tableName := db...

字符串

4xrmg8kj

4xrmg8kj1#

对于Gorm v2,根据https://github.com/go-gorm/gorm/issues/3603,您可以执行以下操作:

stmt := &gorm.Statement{DB: DB}
stmt.Parse(&ColumnStruct2{})
stmt.Schema.Table

字符串

zz2j4svz

zz2j4svz2#

就像这样:

tableName := db.NewScope(model).GetModelStruct().TableName(db)

字符串
更新:更短

tableName := db.NewScope(model).TableName()

yebdmbv4

yebdmbv43#

Gorm v2的另一个方法,不传递DB对象。

type WeatherStation struct{}
s, _ := schema.Parse(&WeatherStation{}, &sync.Map{}, schema.NamingStrategy{})
fmt.Println(s.Table)

字符串

toe95027

toe950274#

当我试图设置一个两个表可以有相同列名的作用域时,我遇到了查找表名的问题。下面的代码片段对我有用。

func(db *gorm.DB) *gorm.DB {
    if db.Statement.Model == nil {
        return db.WithContext(ctx).Where("deleted_at IS NULL")
    }
    model := db.Statement.Model
    db.Statement.Parse(model)
    tableName := db.Statement.Schema.Table
    return db.WithContext(ctx).Where(fmt.Sprintf("%s.deleted_at IS NULL", tableName))
}

字符串

相关问题