1 回答

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個贊
要使用 Gorm 將單個列值選擇到切片中,可以使用db.Pluck幫助器:
var tables []string
if err := db.Table("information_schema.tables").Where("table_schema = ?", "public").Pluck("table_name", &tables).Error; err != nil {
panic(err)
}
TS;WM
考慮到這一點(diǎn),SELECT 語句返回一組包含一個或多個列的行。為了將它們映射到 Go 代碼,我們需要一種結(jié)構(gòu),以便 Gorm 可以了解哪個列映射到結(jié)構(gòu)的哪個字段。即使您只選擇 1 個單列,它也只是一個具有 1 個單字段的結(jié)構(gòu)。
type Table struct {
TableName string
// more fields if needed...
}
所以你的輸出變量應(yīng)該是[]*Table:
var tables []*Table
if err := db.Table("information_schema.tables").Select("table_name").Where("table_schema = ?", "public").Find(&tables).Error; err != nil {
panic(err)
}
注意:[]Table如果您不想修改切片內(nèi)的元素,也可以這樣做。
如果您不想定義結(jié)構(gòu),則可以使用該db.Pluck函數(shù),它只是此類代碼的助手:
rows, err := db.Table("information_schema.tables").Select("table_name").Where("table_schema = ?", "public").Rows()
defer rows.Close()
var tables []string
var name string
for rows.Next() {
row.Scan(&name)
tables = append(tables, name)
}
- 1 回答
- 0 關(guān)注
- 388 瀏覽
添加回答
舉報(bào)