如何在 gorm (GoLang) 中创建 BelongsTo 关系
How to create BelongTo relationship in gorm (GoLang)
这是我的结构
type Book struct {
ID uint `json:"id" gorm:"primary_key"`
Yearmonth string `json:"yearmonth"`
Realname string `json:"real_name"`
LanguageId int
Language Language
}
这是我的控制器逻辑
func GetBooks(c *gin.Context) {
db := c.MustGet("db").(*gorm.DB)
var language []models.Language
if err := db.Where("id=?", c.Param("language_id")).First(&language).Error;
err != nil {
c.JSON(http.StatusBadRequest, gin.H{"data": "No Records Found"})
return
}
var books []models.Book
if errBooks := db.Where("language_id=?", c.Param("language_id")).Find(&books).Error;
errBooks != nil {
c.JSON(http.StatusBadRequest, gin.H{"data": "No Books Found"})
return
}
c.JSON(http.StatusOK, gin.H{"data": books})
}
我尝试了几种方法,结果却得到了空数据。任何建议或帮助都会很棒。 TIA
问题是 language_id
不是从 URL 解析的。
.Param() 用于获取路径中的参数。例如:
router.GET("/user/:id", func(c *gin.Context) {
// a GET request to /user/john
id := c.Param("id") // id == "john"
})
但是您没有指定任何路径参数。您将 language_id
作为 URL 中的查询参数传递。因此,要获取查询字符串参数,您需要使用 .Query()。例如:
GET /path?id=1234&name=Manu&value=
c.Query("id") == "1234"
c.Query("name") == "Manu"
c.Query("value") == ""
c.Query("wtf") == ""
因此,使用 c.Query("language_id")
而不是 c.Param("language_id")
db.Where("id=?", c.Query("language_id")).First(&language)
db.Where("language_id=?", c.Query("language_id")).Find(&books)
这是我的结构
type Book struct {
ID uint `json:"id" gorm:"primary_key"`
Yearmonth string `json:"yearmonth"`
Realname string `json:"real_name"`
LanguageId int
Language Language
}
这是我的控制器逻辑
func GetBooks(c *gin.Context) {
db := c.MustGet("db").(*gorm.DB)
var language []models.Language
if err := db.Where("id=?", c.Param("language_id")).First(&language).Error;
err != nil {
c.JSON(http.StatusBadRequest, gin.H{"data": "No Records Found"})
return
}
var books []models.Book
if errBooks := db.Where("language_id=?", c.Param("language_id")).Find(&books).Error;
errBooks != nil {
c.JSON(http.StatusBadRequest, gin.H{"data": "No Books Found"})
return
}
c.JSON(http.StatusOK, gin.H{"data": books})
}
我尝试了几种方法,结果却得到了空数据。任何建议或帮助都会很棒。 TIA
问题是 language_id
不是从 URL 解析的。
.Param() 用于获取路径中的参数。例如:
router.GET("/user/:id", func(c *gin.Context) {
// a GET request to /user/john
id := c.Param("id") // id == "john"
})
但是您没有指定任何路径参数。您将 language_id
作为 URL 中的查询参数传递。因此,要获取查询字符串参数,您需要使用 .Query()。例如:
GET /path?id=1234&name=Manu&value=
c.Query("id") == "1234"
c.Query("name") == "Manu"
c.Query("value") == ""
c.Query("wtf") == ""
因此,使用 c.Query("language_id")
而不是 c.Param("language_id")
db.Where("id=?", c.Query("language_id")).First(&language)
db.Where("language_id=?", c.Query("language_id")).Find(&books)