【问题标题】:relation with relation query与关系查询的关系
【发布时间】:2020-11-08 15:37:52
【问题描述】:

拥有三个表,TableA、TableB、TableC 和一个联结表,定义如下:

type TableA struct {
   ID int
   Name string
   TableBs []*TableB  `pg:",many2many:table_a_table_b"`
 }

type TableB struct{
  ID int
  Name string
  TableAID int
  TableA *TableA
  TableCID int
  TableC *TableC
}

终于,

 type TableC struct {
   ID int
   Name string
  }

table_a_table_b 是一个联结表,将 TableA 和 TableB 与 many2many 关系关联起来。

到目前为止一切顺利,我可以选择TableA中的数据如下:

 pgdb := pg.Connect(......)
 tableA := []TableA{}
 
 pgd.Model(&tableA).Relation("TableBs").Select()

然而,结果并不是我想要的。它导致这样的事情:

 [
  {
   "Id": 1
   "Name": "TestA record"
   "TableBs": [
      {
         "Id": 1,
         "Name": "TestB record",
         "TableAID": 1,
         "TableCID": 1, //Here, I want to have some extra info about TableC
      }
    }
  ]

在阅读了一些提示后,我开始在关系中使用查询功能。这是我所做的:

 pgdb.Model(&tableA).Relation("TableBs",func(q *orm.Query) (*orm.Query, error) {
   return q.Relation("TableC"), nil
 }).Select()

但我收到了以下详细信息的恐慌:

reflect:在零值上调用 reflect.Value.Type /usr/local/go/src/reflect/value.go:1877 (0x4b5245) Value.Type: 恐慌(&ValueError{"reflect.Value.Type", Invalid}) /home/davood/dev/pkg/mod/github.com/go-pg/pg@v8.0.6+incompatible/orm/model_table.go:73 (0x701adc) newTableModelIndex: typ := typeByIndex(root.Type(), index) /home/davood/dev/pkg/mod/github.com/go-pg/pg@v8.0.6+incompatible/orm/model_table_struct.go:328 (0x707a10) (*structTableModel).join: model, err := newTableModelIndex(bind, index, rel) /home/davood/dev/pkg/mod/github.com/go-pg/pg@v8.0.6+incompatible/orm/model_table_slice.go:57 (0x703f7c) (*sliceTableModel).Join: return m.join(m.Value(), name, apply)

【问题讨论】:

    标签: go go-pg


    【解决方案1】:

    经过一些搜索和我应该给予 reprted go-pg 的 github 问题的信任后,我得出了这个解决方案:

    pgd.Model(&tableA).Relation("TableBs").Relation("TableBs.TableC").Select()
    

    你去!

    【讨论】:

      猜你喜欢
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 2018-12-09
      • 1970-01-01
      相关资源
      最近更新 更多