关联者所属qor admin

时间:2018-08-10 07:01:10

标签: go qor

我有以下两种结构:

type Collection struct {
    gorm.Model
    APIKey       string
    CollectionID string
    Name         string
    Environments []Environment
}
type Environment struct {
    gorm.Model
    EnvironmentID string
    Name          string
    Provider      string
    FlightType    string
    ADT           int
    CHD           int
    INF           int
}

主要外观如下:

func main() {
    adminResource := admin.New(&admin.AdminConfig{DB: model.DB})
    adminResource.AddResource(&model.Collection{})
    adminResource.AddResource(&model.Environment{})

    mux := http.NewServeMux()
    adminResource.MountTo("/admin", mux)

    if err := http.ListenAndServe(":8000", mux); err != nil {
        panic(err)
    } else {
        fmt.Println("Listening on: 8000")
    }
}

重点是,我不知道我是否应该做其他事情来允许Collection与Environemt之间的一对多成员关系。事情是管理员视图上的表单看起来不错,我可以添加尽可能多的环境...但是提交表单仅将Collection保存在数据库中。< / p>

2 个答案:

答案 0 :(得分:1)

所缺少的是告诉gorm另一个模型的外键。

在您的情况下,我们使用Has Many (gorm Doc)。要定义关系,您必须在结构中添加标签:

type Collection struct {
    gorm.Model
    APIKey       string
    CollectionID string
    Name         string
    Environments []Environment `gorm:"foreignkey:EnvironmentID"`
}
type Environment struct {
    gorm.Model
    EnvironmentID string
    Name          string
    Provider      string
    FlightType    string
    ADT           int
    CHD           int
    INF           int
}

如果未定义其他模型的外键,则gorm无法匹配这两个模型。由于主键的conventionID,而您的Enviroment没有该字段,因此无法匹配某些内容。请务必阅读有关conventions的文档。

答案 1 :(得分:0)

最后我找到了解决方法。

type Collection struct {
    gorm.Model
    APIKey       string
    CollectionID string
    Name         string
    Environments []Environment
}
type Environment struct {
    gorm.Model
    EnvironmentID string
    Name          string
    Provider      string
    FlightType    string
    ADT           int
    CHD           int
    INF           int
    CollectionID  int
}

在Environment结构上添加CollectionID int就足够了……简单地:D。

感谢@apxp