主從表的關系之前 一直沒有涉及,之前的做法是,作為兩次查詢,先查詢主表,再查詢從表,浪費兩次交互,后來利用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
