gorm 的關聯關系


 主從表的關系之前 一直沒有涉及,之前的做法是,作為兩次查詢,先查詢主表,再查詢從表,浪費兩次交互,后來利用SQL語句手工拼接,得出行數據,逐行解析。

后來發現這個不能發揮json的優勢?

json的格式是這樣

{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}

 而行數據模式基本都是這樣

[{
      "id": 93,
      "pid": 41,
      "aname": "標書編制",
      "unit": "個",
      "cnt": 1,
      "bonus": 130,
      "remark": "",
      "price": 130
    },
{
      "id": 93,
      "pid": 41,
      "aname": "標書編制",
      "unit": "個",
      "cnt": 1,
      "bonus": 130,
      "remark": "",
      "price": 130
    }
]

 查看gorm的文檔,里面有對於關聯的說明,這里有比較詳細的例子和解釋。

但是對於如何關聯仍然讓人費解,最終在stackoverflow查找,經過實際檢驗方法如下

//主表結構
type Fi_amount_master struct {
	Id           int32              `gorm:"column:id" json:"id"`
	Month        string             `gorm:"column:month" json:"month"`
	Allbonus     float64            `gorm:"column:allbonus" json:"allbonus"`
	Createdate   time.Time          `gorm:"column:createdate" json:"createdate"`
	Createbyname string             `gorm:"column:createbyname" json:"createbyname"`
	Createbyid   int                `gorm:"column:createbyid" json:"createbyid"`
	Remark       string             `gorm:"column:remark" json:"remark"`
	Auditstatus  string             `gorm:"column:auditstatus" json:"auditstatus"`
	Applydate    time.Time          `gorm:"column:applydate" json:"applydate"`
	Detail       []Fi_amount_detail `gorm:"ForeignKey:DetailRefer"`
}
// 從表結構
type Fi_amount_detail struct {
	Id          int     `gorm:"column:id" json:"id"`
	DetailRefer int     `gorm:"column:pid" json:"pid"`
	Aname       string  `gorm:"column:aname" json:"aname"`
	Unit        string  `gorm:"column:unit" json:"unit"`
	Cnt         int     `gorm:"column:cnt" json:"cnt"`
	Bonus       float64 `gorm:"column:bonus" json:"bonus"`
	Remark      string  `gorm:"column:remark" json:"remark"`
	Price       float64 `gorm:"column:price" json:"price"`
}

// 數據獲取

         var master Fi_amount_master
	i.DB.First(&master).Related(&master.Detail, "DetailRefer")

 說明:主表中定義detail 標記 "ForeignKey:DetailRefer"`,在明細表結構中指定 DetailRefer 同時定義數據表中真實的列名`gorm:"column:pid" json:"pid"`

這樣在查詢master 利用,Related指定關聯列名 DetailRefer

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM