我有以下两种结构:
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>
答案 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无法匹配这两个模型。由于主键的convention是ID
,而您的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