具有三个表,分别是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”,无效}) /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:返回m.join(m.Value(),名称,适用)
答案 0 :(得分:3)
经过一些搜索和应归功于go-pg的github问题的信誉,我得出了以下解决方案:
pgd.Model(&tableA).Relation("TableBs").Relation("TableBs.TableC").Select()
你去了!