ZBLOG

gin 一对多模型保存代码

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

  1. package main
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "gorm.io/driver/mysql"
  5. "gorm.io/gorm"
  6. )
  7. type User struct {
  8. gorm.Model
  9. Name string
  10. Email string
  11. Articles []Article // 一个用户可以有多篇文章
  12. }
  13. type Article struct {
  14. gorm.Model
  15. Title string
  16. Content string
  17. UserID uint // 外键,指向User表中的ID字段
  18. }
  19. func main() {
  20. dsn := "username:password@tcp(localhost:3306)/database?charset=utf8mb4&parseTime=True&loc=Local"
  21. db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
  22. if err != nil {
  23. panic("failed to connect database")
  24. }
  25. db.AutoMigrate(&User{}, &Article{})
  26. r := gin.Default()
  27. r.POST("/users", func(c *gin.Context) {
  28. var user User
  29. err := c.ShouldBindJSON(&user)
  30. if err != nil {
  31. c.JSON(400, gin.H{"error": err.Error()})
  32. return
  33. }
  34. result := db.Create(&user)
  35. if result.Error != nil {
  36. c.JSON(500, gin.H{"error": result.Error.Error()})
  37. return
  38. }
  39. c.JSON(200, user)
  40. })
  41. r.POST("/articles", func(c *gin.Context) {
  42. var article Article
  43. err := c.ShouldBindJSON(&article)
  44. if err != nil {
  45. c.JSON(400, gin.H{"error": err.Error()})
  46. return
  47. }
  48. var user User
  49. result := db.First(&user, article.UserID)
  50. if result.Error != nil {
  51. c.JSON(500, gin.H{"error": result.Error.Error()})
  52. return
  53. }
  54. article.UserID = user.ID
  55. result = db.Create(&article)
  56. if result.Error != nil {
  57. c.JSON(500, gin.H{"error": result.Error.Error()})
  58. return
  59. }
  60. c.JSON(200, article)
  61. })
  62. r.GET("/users/:id", func(c *gin.Context) {
  63. var user User
  64. result := db.Preload("Articles").First(&user, c.Param("id"))
  65. if result.Error != nil {
  66. c.JSON(500, gin.H{"error": result.Error.Error()})
  67. return
  68. }
  69. c.JSON(200, user)
  70. })
  71. r.Run()
  72. }

在这个例子中,我们定义了一个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

注册

已经有帐号?