go - 孙外键
问题描述
我在 Go 中创建了一个 rest 应用程序,并将 GORM 用于我的 orm。到目前为止,我已经成功地实现了所有东西,但是我现在想为我的模型添加一些更多的细节,以使前端应用程序更容易。
这将添加“孙子”外键(想不出更好的称呼)。我在文档中看不到任何关于此的内容,但实际上我想要的是以下内容:
type Map struct{
Id int `gorm:"primaryKey"`
Buildings []Building `gorm:"references:Id"`
}
type Building struct{
Id int `gorm:"primaryKey"`
MapId int
Floors []Floor `gorm:"references:Id"`
}
type Floor struct{
Id int `gorm:"primaryKey"`
BuildingId int
MapId int
}
澄清一下,我不确定如何将地图 ID 获取到 Floor 结构的数据库中,并且从阅读文档中我似乎无法找到这样做的方法,如果有人可以链接到某些文档或示例太好了,请注意:我不想只在 ID 内保存地图实例。
解决方案
为将来发现此问题的人提供答案:
在 GORM git 页面 ( https://github.com/go-gorm/gorm/issues/3788 ) 上发布后,我被定向到钩子:https ://gorm.io/docs/hooks.html#Hooks
我解决这个问题的代码是为每个子级别 wgere u 使用 before create 然后在子结构列表上迭代设置适当的值,如下所示:
func (building *Building) BeforeCreate(tx *gorm.DB) (err error){
for i := 0; i < len(building.Floors); i++ {
building.Floors[i].MapId = building.MapId
}
return
}
推荐阅读
- symfony - 将 Symfony 路由器与 vue.js 一起使用
- ios - 尝试使用 Alamofire 5.0.0 获取 ResponseData 时响应包含 nil
- python-3.x - 相机校准中未定义的名称问题
- reactjs - 将 moment.Duration 转换为字符串
- python - 为什么硒不点击?(Python)
- r - R dplyr::按组和数字向量过滤数据帧?
- html - 如何修复日期时间选择器本地化问题
- docker - 将 m3db 与石墨集成
- java - 包 org.apache.hadoop 不存在
- flutter - 使用flutter_bloc提交时如何验证表单?