多人一对一返回空

时间:2019-07-01 08:43:08

标签: go go-gorm

我想使用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 :(得分:0)

您的问题可能是在预加载中:http://gorm.io/docs/preload.html#Preload

尝试以下操作:

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