Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在gorm(GoLang)中建立归属关系_Go_Go Gorm_Belongs To - Fatal编程技术网

如何在gorm(GoLang)中建立归属关系

如何在gorm(GoLang)中建立归属关系,go,go-gorm,belongs-to,Go,Go Gorm,Belongs To,这是我的结构 type Book struct { ID uint `json:"id" gorm:"primary_key"` Yearmonth string `json:"yearmonth"` Realname string `json:"real_name"` LanguageId int Language Language }

这是我的结构

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

问题是
没有从URL解析语言id
。 用于获取路径中的参数。例:

router.GET("/user/:id", func(c *gin.Context) {
    // a GET request to /user/john
    id := c.Param("id") // id == "john"
})
但您不能指定任何路径参数。您正在URL中将
language\u id
作为查询参数传递。因此,要获取querystring参数,您需要使用。例:

因此,使用
c.Query(“language\u id”)
而不是
c.Param(“language\u id”)


你能告诉我你试图调用API的路由代码和URL吗?
r.GET(“/getBooks”,controllers.getBooks)
http://localhost:8080/getBooks?language_id=1
我是这样通过的我得到的是空数据谢谢,它正在工作。但在书籍响应中获取语言的空对象。如何获得语言对象和书籍对象?i、 e.```数据:[{“id”:1,“yearmonth”:“2000_07”,“真实姓名”:“LanguageId”:1,“语言”:{“id”:0,“name”:“CreatedAt”:“0001-01-01T00:00:00Z”,“UpdatedAt”:“0001-01-01T00:00:00Z”},},```@deepu因为您已经获取了语言,您可以在每本书中设置,也可以预加载语言,如
db.Where(“language\u id=?”,c.Query(“language\u id”)。预加载(“language”)。查找(&books)
细节对我很有用!非常感谢!我做到了。标记为正确答案。:)快速问题我想对多个请求使用一个结构,比如上面的结构
/books
我不想显示关系
语言
对象。但是对于
/getBooks
请求,我想显示
语言
对象。如何才能我做到了吗
GET /path?id=1234&name=Manu&value=
   c.Query("id") == "1234"
   c.Query("name") == "Manu"
   c.Query("value") == ""
   c.Query("wtf") == ""
db.Where("id=?", c.Query("language_id")).First(&language)
db.Where("language_id=?", c.Query("language_id")).Find(&books)