为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 GORM 在 GO 中预加载完整的层次结构

如何使用 GORM 在 GO 中预加载完整的层次结构

Go
叮当猫咪 2021-09-27 10:38:41
我有一个由几个结构组成的层次结构type Entry struct {    Id          int    CreatedAt   time.Time    UpdatedAt   time.Time    Fields      []Field}type SyncField struct {    Id                   int    CreatedAt            time.Time    UpdatedAt            time.Time    TechnicalName        string    JsonName             string    EntryId              int    Decorators           []Decorator}type Decorator struct {    Id           int    CreatedAt    time.Time    UpdatedAt    time.Time    Name         string    Description  string    SortingOrder int    Params       string    SyncFieldId  int}我的数据库创建是这样定义的:db.CreateTable(&Entry{})db.CreateTable(&SyncField{})db.Model(&Entry{}).Related(&SyncField{}, "EntryId")db.CreateTable(&Decorator{})db.Model(&SyncField{}).Related(&Decorator{}, "DecoratorId")一切都很清楚,并且可以正常预加载层次结构的一个“子级别”,如下所示:entry := &Entry{Id: i}iDB.Preload("SyncFields").First(entry)或者field := &SyncField{Id: idf}iDB.Preload("Decorators").First(field)我正在寻找一种使用 GORM 预加载整个层次结构的方法,在其中一个根元素上调用“First()”方法......我想加载一个带有所有相关“字段”的“条目”,我也想要让每个“字段”预装其所有“装饰器”......使用几个“Preload()”函数是不可行的:entry := &Entry{Id: i}iDB.Preload("Decorators").Preload("SyncFields").First(entry)我明白iDB.Preload("child1").Preload("child2").First(root)当 child1 和 child2 都是根的“叶子”时,“”是有效的。所以我的问题是:是否可以用 gorm 来做到这一点,如果是,递归加载完整层次结构的最佳方法是什么?
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 335 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信