猿问

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

我有一个由几个结构组成的层次结构


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 来做到这一点,如果是,递归加载完整层次结构的最佳方法是什么?


叮当猫咪
浏览 336回答 2
2回答
随时随地看视频慕课网APP

相关分类

Go
我要回答