为了账号安全,请及时绑定邮箱和手机立即绑定

如何查询GORM模型

如何查询GORM模型

Go
守着星空守着你 2021-03-30 17:14:32
我试图查询给定模型的数据库,但得到一个空白模型作为响应。我正在使用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条经验 获得超5个赞

从数据库填充结构时,您需要传递一个指针,以使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


查看完整回答
反对 回复 2021-04-19
  • 1 回答
  • 0 关注
  • 251 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信