如何查询GORM模型

我试图查询给定模型的数据库,但得到一个空白模型作为响应。我正在使用Revel框架和GORM创建模型并查询数据库。


app.go


package controllers


import (

    "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.go


package controllers


import (

    _ "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 jobs

var Gdb *gorm.DB


// init db

func 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()函数中创建,并且可以正确处理数据。




守着星空守着你
浏览 309回答 1
1回答

杨魅力

从数据库填充结构时,您需要传递一个指针,以使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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go