为了了解如何使用嵌套对象访问数据,我一直在阅读GoLang go-pgsql文档,但到目前为止我一直没有成功。
这里描述了我正在努力实现的目标:
我有两种型号的ClimateQuestions和Steps
type ClimateQuestions struct {
tableName struct{} `pg:"climatequestions"`
Id int `json:"id" pg:",pk"`
Title string `json:"title"`
Steps []*Steps `pg:"rel:has-many"`
}
type Steps struct {
tableName struct{} `pg:"steps"`
Id int `json:"id"`
Label string `json:"label"`
Number int `json:"number"`
QuestionId int `json:"question_id"`
}下面是如何在数据库中定义它们:
CREATE TABLE climatequestions (
id SERIAL PRIMARY KEY,
title VARCHAR(255) NOT NULL
);
CREATE TABLE steps (
id SERIAL PRIMARY KEY,
title VARCHAR(255) NOT NULL,
value DOUBLE PRECISION NOT NULL,
question_id INT REFERENCES climatequestions(id)
);这些模型之间的关系是这样的:对于每一个气候问题,都可以有很多步骤。我通过在ClimateQuestions结构中添加一个名为Steps和rel:has-many的字段来表示这一点。
现在,从数据库中,我想获得所有的气候问题,在每个问题中,我想要一组步骤数据。
我第一个做到这一点的方法是:
var climateQuestions []model.ClimateQuestions
err := db.Model(&climateQuestions).Select()这部分起作用,因为它返回与气候问题相关的所有数据,但不添加嵌套步骤数据。以下是返回内容的JSON格式:
[{"id":1,"title":"first question?","Steps":null},{"id":2,"title":"second question?","Steps":null}]对于我如何做到这一点,有什么想法吗?
发布于 2022-02-27 00:20:31
pg:"rel:has-many,join_fk:question_id"中添加ClimateQuestions.Steps标记Steps中,您需要告诉pg它是哪个字段。Relation函数这是正确的结构
type ClimateQuestions struct {
tableName struct{} `pg:"climatequestions"`
Id int `json:"id" pg:",pk"`
Title string `json:"title"`
Steps []*Steps `pg:"rel:has-many,join_fk:question_id"`
}
type Steps struct {
tableName struct{} `pg:"steps"`
Id int `json:"id"`
Label string `json:"label" pg:"title"`
Number int `json:"number" pg:"value"`
QuestionId int `json:"question_id"`
}这就是你应该如何执行db。
var climateQuestions []ClimateQuestions
err := db.Model(&climateQuestions).Relation("Steps").Select()
if err != nil {
panic(err.Error())
}
for _, v := range climateQuestions {
fmt.Printf("%#v\n", v)
for _, v1 := range v.Steps {
fmt.Printf("%#v\n", v1)
}
fmt.Println("")
}https://stackoverflow.com/questions/71279864
复制相似问题