Горм много к одному возвращается пустым - PullRequest
0 голосов
/ 01 июля 2019

Я хочу использовать gorm использование отношений много-к-одному в моем проекте. Мои struct такие:

type Book struct {
    ID          uint
    Title       string
    Subtitle    string
    Chapters    []Chapter `gorm:"foreignkey:BookID;association_foreignkey:ID"`

} }

// TableName is book
func (Book) TableName() string {
    return "book"
}

// Chapter of books
type Chapter struct {
    ID      uint
    BookID  string
    Chapter string
}

Я хочу получить главы книги с помощью этой команды: book.chapters. Я использую следующие коды для получения книг и глав:

var book models.Book
    db.First(&book, "id = ?", 4)
    fmt.Println(book.ID, book.Chapters) // returns []

когда я запрашиваю главы с book_id = 4, я получаю 11 результатов:

   var chapters []models.Chapter
   db.Find(&chapters, "book_id = ? ", 4)
   fmt.Println("len(chapters) = ", len(chapters)) // len(chapters) =11

и когда я устанавливаю db.LogMode (true) и вижу, что происходит в коде, я вижу, что запрос book только запрашивает книги, не присоединяющиеся к этому с chapters:

SELECT * FROM "book" WHERE (id = 4) ORDER BY "book"."id" ASC LIMIT 1

Есть ли что-то, что я пропустил в документации? как сделать структуру книги непустой book.chapters.

1 Ответ

0 голосов
/ 01 июля 2019

Ваша проблема, вероятно, в предварительной загрузке: http://gorm.io/docs/preload.html#Preload

Попробуйте следующее:

var book models.Book
db.Preload("Chapters").First(&book, "id = ?", 4)
fmt.Println(book.ID, book.Chapters)
...