gin框架实现两表联查
时间: 2023-06-29 16:10:09 浏览: 124
Go语言中的gin框架Model + 上传文件(八)
在 gin 框架中,可以使用 gorm 库来实现两表联查。假设我们有两个表,一个是 user 表,另一个是 article 表,它们之间存在一对多的关系,即一个用户可以拥有多篇文章。下面是一个示例代码:
```go
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 := "root:password@tcp(127.0.0.1:3306)/test_db?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{})
router := gin.Default()
// 查询某个用户及其所有文章
router.GET("/users/:id", func(c *gin.Context) {
var user User
if err := db.Preload("Articles").First(&user, c.Param("id")).Error; err != nil {
c.JSON(500, gin.H{"error": "server error"})
return
}
c.JSON(200, user)
})
router.Run(":8080")
}
```
在上面的示例代码中,我们定义了两个模型 User 和 Article,它们之间通过外键 UserID 建立了关联。在路由中,我们使用 `db.Preload("Articles")` 预加载了文章数据,这样在查询用户信息时也会返回其所有文章的信息。最后,通过 `c.JSON(200, user)` 将查询结果以 JSON 格式返回给客户端。
需要注意的是,在实际开发中,我们应该将数据库连接、路由定义等功能拆分到不同的文件中,以提高代码的可维护性和可扩展性。
阅读全文