ZBLOG

gin 一对多模型保存代码

以下是使用gin框架保存一对多模型的示例代码:

package main

import (
    "github.com/gin-gonic/gin"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

type User struct {
    gorm.Model
    Name     string
    Email    string
    Articles []Article // 一个用户可以有多篇文章
}

type Article struct {
    gorm.Model
    Title     string
    Content   string
    UserID    uint // 外键,指向User表中的ID字段
}

func main() {
    dsn := "username:password@tcp(localhost:3306)/database?charset=utf8mb4&parseTime=True&loc=Local"

    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    
	if err != nil {
        panic("failed to connect database")
	}
	
	db.AutoMigrate(&User{}, &Article{})

	r := gin.Default()

	r.POST("/users", func(c *gin.Context) {
		var user User
		
		err := c.ShouldBindJSON(&user)
		if err != nil {
			c.JSON(400, gin.H{"error": err.Error()})
			return
		}
		
		result := db.Create(&user)
		if result.Error != nil {
			c.JSON(500, gin.H{"error": result.Error.Error()})
			return
		}
		
		c.JSON(200, user)
	})

	r.POST("/articles", func(c *gin.Context) {
        var article Article
        
        err := c.ShouldBindJSON(&article)
        if err != nil {
            c.JSON(400, gin.H{"error": err.Error()})
            return
        }
        
        var user User
        
        result := db.First(&user, article.UserID)
        if result.Error != nil {
            c.JSON(500, gin.H{"error": result.Error.Error()})
            return
        }
        
        article.UserID = user.ID
        
        result = db.Create(&article)
        if result.Error != nil {
            c.JSON(500, gin.H{"error": result.Error.Error()})
            return
        }
        
        c.JSON(200, article)
    })

	r.GET("/users/:id", func(c *gin.Context) {
		var user User
		
		result := db.Preload("Articles").First(&user, c.Param("id"))
		if result.Error != nil {
			c.JSON(500, gin.H{"error": result.Error.Error()})
			return
		}
		
		c.JSON(200, user)
	})

	r.Run()
}

在这个例子中,我们定义了一个User模型和一个Article模型。每个用户可以有多篇文章,因此我们在User结构体中添加了一个Articles切片作为关联字段。同时,在Article结构体中添加了一个UserID字段作为外键,指向User表中的ID字段。

我们使用GORM来保存这些模型,并使用gin框架来处理HTTP请求。在创建文章时,我们需要首先查询到对应的用户并将其ID设置为UserID字段,然后才能保存文章。在获取用户信息时,我们使用GORM的Preload函数来一次性获取到该用户所有的文章信息。

注意,在实际生产环境中,您需要对代码进行更多的错误处理和安全检查。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=5170

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?