Есть ли способ с помощью вложенной предварительной загрузки 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)
        }
    }
}

person TheJediCowboy    schedule 22.10.2019    source источник


Ответы (1)


Тег gorm на вашем OptionItem недействителен, он должен быть gorm:"preload:true".

Кроме того, вы всегда можете предварительно загрузить вложенную ассоциацию с помощью db.Preload("OptionItems.OptionItem").

p / s: Мне больно смотреть на имена тех структур: D

person Dat Ngo    schedule 24.11.2019