登录
首页 >  Golang >  Go问答

GORM 对 Many2many 关联不进行自动创建

来源:stackoverflow

时间:2024-02-11 17:48:23 130浏览 收藏

今天golang学习网给大家带来了《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,并且还用邮递员发送了一些请求,结果是相同的 - 作者卡为空


正确答案


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

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年 23fdgsddd测试

此外,您的 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
}

到这里,我们也就讲完了《GORM 对 Many2many 关联不进行自动创建》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>