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

postgres,go-gorm - 无法预加载数据

postgres,go-gorm - 无法预加载数据

Go
慕尼黑的夜晚无繁华 2022-05-23 17:47:25
我正在尝试使用 gorm 在我的 postgresql 上查询一行时预加载一些数据我在belongs to关联中定义了以下类型:type MyObject struct {    ID            uint      `grom:"column:id" json:"id"`    Name          string    `gorm:"column:name" json:"name"`    OwnerID       uint      `gorm:"column:owner_id" json:"owner_id"`    Owner         Owner     `json:"owner"`    ...}type Owner struct {    ID         uint            `gorm:"column:id" json:"id"`    Name       string          `gorm:"column:name" json:"name"`    Config     json.RawMessage `gorm:"column:config" sql:"type:json" json:"config"`    Components []uint8         `gorm:"column:components;type:integer[]" json:"components"`}和postgres db中的表,一行如下my_schema.my_objectid  | name      | owner_id  | ...----|-----------|-----------|-----0   | testobj   | 0         | ...my_schema.ownerid  | name      | config    | components----|-----------|-----------|-----------0   | testowner | <jsonb>   | {0,1,2,3}我正在使用 gorm 运行以下查询:object := &models.MyObject{}result := ls.Table("my_schema.my_object").    Preload("Owner").    Where("id = ?", "0").    First(object)    但结果,object我得到以下结构:{"id": 0, "name": "testobj", "owner_id":0, "owner": {"id": 0, "name": "", "config": nil, "components": nil}}我没有收到任何类型的错误或警告,在数据库创建 sql 脚本中指定了外键关系
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

TableName()通过为我的每个模型实现该方法,我能够实现我想要的:


type MyObject struct {

    ID            uint      `grom:"column:id" json:"id"`

    OwnerID       uint      `gorm:"column:owner_id" json:"owner_id"`

    Owner         Owner     `json:"owner"`

    ...

}


func (MyObject) TableName() {

    return "my_schema.my_object"

}


type Owner struct {

    ID         uint            `gorm:"column:id" json:"id"`

    ...

}


func (Owner) TableName() {

    return "my_schema.owner"

}

然后,我可以在如下查询中使用它:


myObject := &models.MyObject{}

result := ls.Model(myObject).

    Where("id = ?", id).  //assume any valid value for id

    First(myObject).

    Related(&myObject.Owner)


return myObject, processResult(result)

最后,当向我的服务器发出请求时,MyObject我得到了Owner数据库中相关对象的所有数据:


$ curl "http://localhost:8080/api/objetcs/related/1" | jq  // passing 1 as object id value in url params

{

  "id": "1", // taken from UrlParam

  "name": "testobj",

  "owner": {

    "id": "1", // using foreign key owner_id

    "name": "testowner",

    "config": configJson // json object taken from row in my_schema.owner table in the DB

    }

  }

}


查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

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