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

fr0*_*t1k 4 go go-gorm

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

user := User{}
tableName := db...
Run Code Online (Sandbox Code Playgroud)

小智 13

对于 Gorm v2,根据https://github.com/go-gorm/gorm/issues/3603,你可以这样做:

stmt := &gorm.Statement{DB: DB}
stmt.Parse(&ColumnStruct2{})
stmt.Schema.Table
Run Code Online (Sandbox Code Playgroud)


fr0*_*t1k 6

像这样:

tableName := db.NewScope(model).GetModelStruct().TableName(db)
Run Code Online (Sandbox Code Playgroud)

更新:更短

tableName := db.NewScope(model).TableName() 
Run Code Online (Sandbox Code Playgroud)

  • 它可能更短:`tableName := db.NewScope(model).TableName()` (3认同)
  • 接受的答案不适用于 https://gorm.io/ 的图书馆 (2认同)
  • 接受的答案适用于 v1,对于 v2,请检查上面的答案。 (2认同)

小智 5

Gorm v2 的另一种方法,无需传递 DB 对象。

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