我一直在阅读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
with的结构中添加一个字段来表示这一点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}]
关于我如何实现这一目标的任何想法?