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