GORM嵌套预加载是否可以在要预加载的项目上预加载数组的结构?

时间:2019-10-22 19:00:02

标签: go go-gorm

最好用一个简单/相关的例子来描述我的问题。鉴于以下结构,有没有一种方法可以在GORM中使用嵌套的预加载在预加载的模型上填充数组的模型?

type OptionItem struct {
    gorm.Model
    blah    string
}

type OrderItem struct {
    gorm.Model

    OptionItems  []OrderOptionItem

    OrderID       uint                 `gorm:"column:order_id"`
    Order         Order
}

type OrderOptionItem struct {
    gorm.Model

    OrderItemID  uint                  `gorm:"column:order_item_id""`

    OptionItemID uint                  `gorm:"column:option_item_id"`
    OptionItem   OptionItem            `gorm:"auto_preload"`
}


func getOrderItemsByOrderID(orderID string) {

    var orderItems []OrderItem
    a.db.DB.
        Preload("Order", "id = (?)", orderID).
        Preload("OptionItems").
        Find(&orderItems)


    for _, oi := range orderItems {
        for _, ooi := range oi.OptionItems {
            // OptionItem on OrderOptionItem is not populated
            log.Println(ooi.OptionItem.ID)
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您的OptionItem上的gorm标记无效,应该为gorm:"preload:true"

或者,您始终可以通过db.Preload("OptionItems.OptionItem")预加载嵌套关联。

p / s:看着那些结构的名字:D