gpt4 book ai didi

mysql - db.Save()成功后如何查询关联

转载 作者:行者123 更新时间:2023-11-29 15:37:00 26 4
gpt4 key购买 nike

我正在使用 Gorm 和 Graphql。直到我尝试使用两个现有项目的 foreignkey 关系来连接它们时,我才遇到了查询数据的问题。这是我的两个模型:

type Report struct {
db.Base
OwnerID string
Patient patients.Patient `gorm:"association_name:Patient;"`
PatientID string
}
type Patient struct {
db.Base
ReportID string
}

我有一个将关系保存到数据库的函数:

func (s *Store) AddPatientToReport(ctx context.Context, id string, patient *patients.Patient) (*Report, error) {

// check against user using context

report, err := s.Report(ctx, id)
if err != nil {
log.Error("Could not find report.")
return nil, err
}

report.PatientID = patient.ID

if err := s.db.Save(&report).Association("Patient").Append(patient).Error; err != nil {
log.WithError(err).Error("add patient failed")
return nil, err
}

return report, nil
}

在上述函数之后,我可以查询Report并查看patent_id。我还可以查询 Patient 并查看 report_id。但以下从 Report 获取整个 Patient 的查询仅返回空。

query {
report(id: "report_id") {
id
patientID // this will return the correct patient_id
patient {
id // this field always comes back as an empty string
}
}
}

以下是数据库的设置方式:

// NewConn creates a new database connection
func NewConn(cc ConnConf) (*Conn, error) {
db, err := gorm.Open("mysql", cc.getCtxStr())
if err != nil {
return nil, err
}

// Models are loaded from each package. Patients is created before Reports.
if err := db.AutoMigrate(Models...).Error; err != nil {
log.Fatal(err)
}


db.LogMode(cc.Logger)

return &Conn{db}, err
}

我不知道如何让整个病人回来。有什么建议吗?

最佳答案

好吧,事实证明我只需要问一下,几分钟后我就会自己解决。

我在 Gorm 文档中读到过有关 Preload() 的内容,但不知道在哪里实现它。当数据库启动时我第一次尝试,认为它会加载关联。但我确实需要在运行查询时使用 Preload()

result := &Report{}
if err = s.db.Preload("Patient").Where(&query).First(&result).Error; err != nil {
log.WithField("id", id).WithError(err).
Error("could not find report")
return nil, err
}

现在,graphql 查询:

query {
report(id: "some_id") {
id
patient {
id // now it returns the id
birthyear // now it returns other fields, too
...
}
}
}

关于mysql - db.Save()成功后如何查询关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58140277/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com