Go 与qor admin关联

Go 与qor admin关联,go,qor,Go,Qor,我有以下两种结构: type Collection struct { gorm.Model APIKey string CollectionID string Name string Environments []Environment } type Environment struct { gorm.Model EnvironmentID string Name string

我有以下两种结构:

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")
    }
}

问题是,我不知道我是否应该做些别的事情来允许集合和环境之间的一对多成员关系。问题是管理视图上的表单看起来不错,我可以添加尽可能多的环境。。。但是提交表单时,只有
集合
保存在数据库中

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

在你的情况下,我们使用。要定义关系,必须向结构添加标记:

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将无法匹配这两个模型。由于主键的字段是
ID
,而您的
环境没有该字段,因此无法匹配某些内容。请务必阅读有关的文档。

我终于找到了解决方案

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
}
在环境结构上添加
CollectionID int
就足够了。。。这么简单:D


谢谢@apxp

您在两款机型之间设置了任何关系吗?您好@apxp我正在尝试这样做:
db.Model(&Collection)。Related(&Environment)
。我尝试使用集合和环境的结构作为参数,但这些函数是面向实例的。我不知道该在哪里做,因为表单的处理是由qor内部管理的。有没有办法在集合的负载上添加一个中间件(或其他东西)?嗨,再次@apxp似乎开始工作了。。。但我发现了两个新问题:1)管理员不允许编辑环境ID(这是必需的)。解决方案:
Environments[]Environment`gorm:“foreignkey:ID”`
。2) 此解决方案会产生一个新问题:数据库上只保存最后一个环境,尝试添加新环境,最后一个环境编辑上一个环境,而不是插入新环境。3) 我尝试这样做(在env结构上):
ID uint`gorm:“primary_key”sql:“AUTO_INCREMENT”`
但是添加超过我得到的env:pq:duplicate key违反了唯一性限制«environments_pkey»