最新 go-pg 中的专栏
Column in latest go-pg
我正在从 go-pg 从 8.0.5
更新到 10.3.2
并且我对 ORM
列有问题
结构:
type Item struct {
ID int `pg:"id,pk"`
Name string `pg:"name"`
Desc string `pg:"description"`
SubItems []SubItem `pg:"rel:has-many"`
}
type SubItem struct {
ID int `pg:"id,pk"`
ItemID int `pg:"item_id"`
Name string `pg:"name"`
Item Item `pg:"rel:has-one"`
}
这是单元测试失败的部分
list := []test.Item{{ID: 1, Name: "first"}, {ID: 2, Name: "second"}, {ID: 3, Name: "third"}}
subItems := []test.SubItem{{ID: 1, ItemID: 1}, {ID: 2, ItemID: 3}}
_, err := dbConn.model(list).Insert()
So(err, ShouldBeNil)
_, err = dbConn.model(subItems).Insert()
So(err, ShouldBeNil)
expected := test.SubItem{
ID: 2,
ItemID: 3,
Item: test.Item{ID: 3, Name: "third"},
}
var actual test.SubItem
err = dbConn.Model(&actual).Column("item").Where("sub_item.id = 2").Select()
So(err, ShouldBeNil)
So(actual, ShouldResemble, expected)
我 运行 遇到的问题是,在 v8 中,这个选择 item
带有一个连接。在 v10 中,它抛出“列 'item' 不存在”错误。
这样做的正确方法是什么?
在v9检查中更改changes here:
Query.Column does not accept relation name any more. Use Query.Relation instead which returns an error if relation does not exist.
尝试使用 Relation 然后您将获得所有项目列。
err = dbConn.Model(&actual).
Column("_").
Relation("Item").
Where("sub_item.id = 2").
Select()
文档中有更多 select 选项与 table 关系的映射:Writing queries
我正在从 go-pg 从 8.0.5
更新到 10.3.2
并且我对 ORM
结构:
type Item struct {
ID int `pg:"id,pk"`
Name string `pg:"name"`
Desc string `pg:"description"`
SubItems []SubItem `pg:"rel:has-many"`
}
type SubItem struct {
ID int `pg:"id,pk"`
ItemID int `pg:"item_id"`
Name string `pg:"name"`
Item Item `pg:"rel:has-one"`
}
这是单元测试失败的部分
list := []test.Item{{ID: 1, Name: "first"}, {ID: 2, Name: "second"}, {ID: 3, Name: "third"}}
subItems := []test.SubItem{{ID: 1, ItemID: 1}, {ID: 2, ItemID: 3}}
_, err := dbConn.model(list).Insert()
So(err, ShouldBeNil)
_, err = dbConn.model(subItems).Insert()
So(err, ShouldBeNil)
expected := test.SubItem{
ID: 2,
ItemID: 3,
Item: test.Item{ID: 3, Name: "third"},
}
var actual test.SubItem
err = dbConn.Model(&actual).Column("item").Where("sub_item.id = 2").Select()
So(err, ShouldBeNil)
So(actual, ShouldResemble, expected)
我 运行 遇到的问题是,在 v8 中,这个选择 item
带有一个连接。在 v10 中,它抛出“列 'item' 不存在”错误。
这样做的正确方法是什么?
在v9检查中更改changes here:
Query.Column does not accept relation name any more. Use Query.Relation instead which returns an error if relation does not exist.
尝试使用 Relation 然后您将获得所有项目列。
err = dbConn.Model(&actual).
Column("_").
Relation("Item").
Where("sub_item.id = 2").
Select()
文档中有更多 select 选项与 table 关系的映射:Writing queries