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


文档中是否有我遗漏的内容?我应该如何使这本书结构 get 非空book.chapters。


冉冉说
浏览 149回答 1
1回答

守着星空守着你

您的问题可能出在预加载中,请尝试以下操作:var book models.Bookdb.Preload("Chapters").First(&book, "id = ?", 4)fmt.Println(book.ID, book.Chapters)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go