为了账号安全,请及时绑定邮箱和手机立即绑定

GORM 不会创建 many2many 关联

GORM 不会创建 many2many 关联

Go
慕后森 2022-12-26 15:39:15
我有模型:type Book struct {    gorm.Model    Title       string `json:"title"`    Author      string `json:"author"`    Description string `json:"description"`    Category    string `json:"Category"`    Publisher   string `json:"publisher"`    AuthorsCard []*AuthorsCard `gorm:"many2many:book_authorscard; "json:"authorscard"`}type AuthorsCard struct {    gorm.Model    Name        string `json:"name"`    Age         int    `json:"age"`    YearOfBirth int    `json:"year"`    Biography   string `json:"biography"`}在 db.AutoMigrate(&models.Book{}, &models.AuthorsCard{})我有一个创建函数:func TestCreate() {    var testbook = models.Book{        Title:  "Test",        Author: "tst",        AuthorsCard: []*models.AuthorsCard{            {                Age:         23,                Name:        "test",                YearOfBirth: 1999,                Biography:   "23fdgsdddTEST",            },        },        Description: "something",    }    db.Preload("AuthorsCard").Find(&models.Book{})    db.Create(&testbook)}尽管 AuthorsCard 中有一些数据,但我收到了以下回复:{        "ID": 78,        "CreatedAt": "2022-06-23T13:10:58.01629+03:00",        "UpdatedAt": "2022-06-23T13:10:58.01629+03:00",        "DeletedAt": null,        "title": "Test",        "author": "tst",        "description": "something",        "Category": "",        "publisher": "",        "authorscard": null    }如您所见,“authorscard”为空。如何将“authorscard”保存到数据库?我使用了 Gorm + postgresql 并且我用邮递员发送了一些请求,结果是一样的 - 作者卡是空的
查看完整描述

1 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

当以正确的顺序调用代码时,代码可以正常工作:


func TestCreate() {

    db := getDB()

    db.AutoMigrate(&Book{}, AuthorsCard{})


    var testbook = Book{

        Title:  "Test",

        Author: "tst",

        AuthorsCard: []*AuthorsCard{

            {

                Age:         23,

                Name:        "test",

                YearOfBirth: 1999,

                Biography:   "23fdgsdddTEST",

            },

        },

        Description: "something",

    }


    // 1. Create your testbook.

    db.Create(&testbook)


    // 2. Store it into a variable:

    var b1 *Book

    db.Preload("AuthorsCard").Find(&b1)

    

    fmt.Println(b1.AuthorsCard[0].Age)

    fmt.Println(b1.AuthorsCard[0].Name)

    fmt.Println(b1.AuthorsCard[0].YearOfBirth)

    fmt.Println(b1.AuthorsCard[0].Biography)


}

印刷:


23 测试 1999 23fdgsdddTEST


此外,您的 JSON 导出可能会失败,因为您将指针传递给 AuthorCard 并且在这些情况下编组并不总是正常工作。然而,GORM 在这方面做得很好。


静态检查在这里也给了我一些提示:


type Book struct {

    gorm.Model

    Title       string         `json:"title"`

    Author      string         `json:"author"`

    Description string         `json:"description"`

    Category    string         `json:"Category"`

    Publisher   string         `json:"publisher"`

    AuthorsCard []*AuthorsCard `gorm:"many2many:book_authorscard" json:"authorscard"` // wrong space

}


查看完整回答
反对 回复 2022-12-26
  • 1 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信