我試圖查詢給定模型的數據庫,但得到一個空白模型作為響應。我正在使用Revel框架和GORM創建模型并查詢數據庫。app.gopackage controllersimport ( "github.com/revel/revel" "route/to/models")type App struct { *revel.Controller GormController}func (c App) Index() revel.Result { accounts := models.Account{} account := c.DB.Find(accounts) return c.RenderJSON(account)}gorm.gopackage controllersimport ( _ "github.com/jinzhu/gorm/dialects/postgres" "github.com/jinzhu/gorm" r "github.com/revel/revel")type GormController struct { *r.Controller DB *gorm.DB}// it can be used for jobsvar Gdb *gorm.DB// init dbfunc InitDB() { var err error // open db Gdb, err = gorm.Open("postgres", "host=hostname port=5432 user=postgres password=password dbname=some_db_name sslmode=disable") Gdb.LogMode(true) // Print SQL statements if err != nil { r.ERROR.Println("FATAL", err) panic(err) }}func (c *GormController) SetDB() r.Result { c.DB = Gdb return nil}不確定我要去哪里錯,最終我想從帳戶中選擇*;注意:我可以運行遷移并在Index()函數中創建,并且可以正確處理數據。
1 回答

楊魅力
TA貢獻1811條經驗 獲得超6個贊
從數據庫填充結構時,您需要傳遞一個指針,以使GORM能夠填充它。否則,它是按值傳遞的,GORM會填充副本,而您永遠不會看到它。
而且,如果要獲取所有帳戶,則應將指針傳遞給一部分帳戶。關于指針與值,切片與結構的不同之處在于,即使在傳遞值的情況下,仍可以修改基礎數組,但是在函數之外,即使填充數組,切片的長度(和容量)也不會改變在函數中,因此如果沒有指針,它仍然不會表現出預期的效果。
然后您應該檢查Error:
accounts := make([]models.Account, 0)
if err := c.DB.Find(&accounts).Error; err != nil {
if gorm.IsRecordNotFoundError(err) {
// handle not found
} else {
// print/log/return error
}
return
}
// do something with accounts
- 1 回答
- 0 關注
- 307 瀏覽
添加回答
舉報
0/150
提交
取消