猿问

GORM 不会创建 many2many 关联

我有模型:


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 并且我用邮递员发送了一些请求,结果是一样的 - 作者卡是空的


慕后森
浏览 106回答 1
1回答

紫衣仙女

当以正确的顺序调用代码时,代码可以正常工作: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}
随时随地看视频慕课网APP

相关分类

Go
我要回答