Я работаю с 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
и посмотретьpatient_id
.Я также могу запросить Patient
и посмотреть report_id
.Но следующий запрос для получения всего Patient
из Report
просто возвращает пустое значение.
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
}
Я не могувыяснить, как вернуть весь patient
.Есть предложения?