查询嵌套关系gorm

时间:2018-08-13 17:49:44

标签: go go-gorm

我有一个问题,因为我无法使用database.DB.Model(object.field.subfield).Related(&object.field.subfield.whatever)访问数据库中的某些表。

我正在使用这些模型(简体):

type RunResult struct {
    gorm.Model
    TestRun    TestRun
    TestRunID  uint
}
type TestRun struct {
    gorm.Model
    Stats      Stats
}
type Stats struct {
    gorm.Model
    Scripts      Stt 
    PreRequest   Stt 
    Request      Stt 
    Test         Stt
    Assertion    Stt
    ScriptsID    uint
    PreRequestID uint
    RequestID    uint
    TestID       uint
    AssertionID  uint
}
type Stt struct {
    gorm.Model
    Total   int 
    Pending int
    Failed  int
}

我正在执行的查询是:

results := []model.RunResult{}
database.DB.Find(&results)
for _, result := range results {
    database.DB.Model(result).Related(&result.TestRun)
    database.DB.Model(result.TestRun).Related(&result.TestRun.Stats)

    database.DB.Model(result.TestRun.Stats).Related(&result.TestRun.Stats.Scripts)
    database.DB.Model(result.TestRun.Stats).Related(&result.TestRun.Stats.PreRequest)
    database.DB.Model(result.TestRun.Stats).Related(&result.TestRun.Stats.Request)
    database.DB.Model(result.TestRun.Stats).Related(&result.TestRun.Stats.Test)
    database.DB.Model(result.TestRun.Stats).Related(&result.TestRun.Stats.Assertion)
    checkResult(t, result)
}

最后,日志中的输出为:

SELECT * FROM "run_results"  WHERE "run_results"."deleted_at" IS NULL
1 rows affected or returned

SELECT * FROM "test_runs"  WHERE "test_runs"."deleted_at" IS NULL AND (("id" = '1'))
1 rows affected or returned

SELECT * FROM "stats"  WHERE "stats"."deleted_at" IS NULL AND (("id" = '1'))
1 rows affected or returned

invalid association
invalid association
invalid association
invalid association
invalid association

因此,似乎主查询和两个first关联都可以正常工作,但是与Stt结构的所有关系都不能正常运行。结构名称与之相关吗?我应该为每个Stt使用一个模型(我的意思是,脚本应该使用称为脚本的结构)吗?任何解决方案?

谢谢。

0 个答案:

没有答案