根据业务需求,就是需要查询两表的数据,我用了一个笨方法。直接上代码
代码
controllers
// GetAll ...
// @Title Get All
// @Description get TestData
// @Param query query string false "Filter. e.g. col1:v1,col2:v2 ..."
// @Param fields query string false "Fields returned. e.g. col1,col2 ..."
// @Param sortby query string false "Sorted-by fields. e.g. col1,col2 ..."
// @Param order query string false "Order corresponding to each sortby field, if single value, apply to all sortby fields. e.g. desc,asc ..."
// @Param limit query string false "Limit the size of result set. Must be an integer"
// @Param offset query string false "Start position of result set. Must be an integer"
// @Success 200 {object} models.TestData
// @Failure 403
// @router / [get]
func (c *TestDeviceDataController) GetAll() {
//TestDevice variable
var imei string
var producer string
var productName string
// var productTime time.Time
var testResult string
// var testTime time.Time
var tester string
var testerJobnum string
//TestData variable
var testData string
var testItem string
var deviceId int
var limit int = 10
var offset int = 0
if v, err := c.GetInt("pageSize"); err == nil {
limit = v
}
if v, err := c.GetInt("current"); err == nil {
offset = (v - 1) * limit
}
if v := c.GetString("imei"); v != "" {
imei = v
}
if v := c.GetString("producer"); v != "" {
producer = v
}
if v := c.GetString("productName"); v != "" {
productName = v
}
// if v := c.GetString("productTime"); v != "" {
// productTime = v
// }
if v := c.GetString("testResult"); v != "" {
testResult = v
}
// if v := c.GetString("testTime"); v != "" {
// testTime = v
// }
if v := c.GetString("tester"); v != "" {
tester = v
}
if v := c.GetString("testerJobnum"); v != "" {
testerJobnum = v
}
if v := c.GetString("testData"); v != "" {
testData = v
}
if v := c.GetString("testItem"); v != "" {
testItem = v
}
if v, err := c.GetInt("deviceId"); err == nil {
deviceId = v
}
l, total := models.GetAllTestDeviceData(limit, offset, imei, producer, productName, testResult, tester, testerJobnum, testData, testItem, deviceId)
c.SuccessData(ListData{Data: l, Total: total})
}
models
func GetAllTestDeviceData(limit int, offset int, imei string, producer string, productName string, testResult string,
tester string, testerJobnum string, testData string, testItem string, deviceId int) (data []TestDevice, total int64) {
var testDeviceData []TestDevice
var ctestData []*TestData
o := orm.NewOrm()
qs := o.QueryTable(new(TestDevice).TableName())
qd := o.QueryTable(new(TestData).TableName())
if imei != "" {
qs = qs.Filter("imei", imei)
}
if producer != "" {
qs = qs.Filter("producer", producer)
}
if productName != "" {
qs = qs.Filter("productName", productName)
}
if testResult != "" {
qs = qs.Filter("testResult", testResult)
}
if tester != "" {
qs = qs.Filter("tester", tester)
}
if testerJobnum != "" {
qs = qs.Filter("testerJobnum", testerJobnum)
}
if testData != "" {
qd = qd.Filter("testData", testData)
}
if testItem != "" {
qd = qd.Filter("testItem", testItem)
}
// if deviceId >= 0 {
// qs = qs.Filter("deviceId", deviceId)
// }
total, _ = qs.Count()
qs.Limit(limit).Offset(offset).OrderBy("-id").All(&testDeviceData)
for k, v := range testDeviceData {
qd.Filter("test_device_id", v.Id).All(&ctestData)
// v.DevGetJsonData = ctestData
testDeviceData[k].DevGetJsonData = ctestData
fmt.Println(v)
}
return testDeviceData, total
}
查询结果
{
"code": 0,
"msg": "success",
"data": {
"data": [
{
"Id": 6,
"dev_imei": "222222222264456",
"dev_producer": "Manufacturer Name",
"dev_producer_name": "smart_city_cover",
"dev_producer_time": "2022-03-05T00:00:00+08:00",
"dev_test_result": "ko",
"dev_test_time": "2022-03-09T08:41:45+08:00",
"dev_tester": "fgh",
"dev_tester_jobnum": "fds",
"data": [
{
"Id": 61,
"devdata_test_data": "ui,",
"devdata_test_item": "rteg",
"devdata_test_device_id": 6,
"data": null
},
{
"Id": 62,
"devdata_test_data": "bffgsdf",
"devdata_test_item": "qweqrtew",
"devdata_test_device_id": 6,
"data": null
}
]
},
{
"Id": 5,
"dev_imei": "222222222264453",
"dev_producer": "Manufacturer Name",
"dev_producer_name": "smart_city_cover",
"dev_producer_time": "2022-03-05T00:00:00+08:00",
"dev_test_result": "bfghn",
"dev_test_time": "2022-03-07T09:11:18+08:00",
"dev_tester": "fgh",
"dev_tester_jobnum": "fds",
"data": [
{
"Id": 49,
"devdata_test_data": "kk,",
"devdata_test_item": "rteg",
"devdata_test_device_id": 5,
"data": null
},
{
"Id": 50,
"devdata_test_data": "bffgsdf",
"devdata_test_item": "qweqrtew",
"devdata_test_device_id": 5,
"data": null
}
]
},
{
"Id": 4,
"dev_imei": "222222222266442",
"dev_producer": "Manufacturer Name",
"dev_producer_name": "smart_city_cover",
"dev_producer_time": "2022-03-05T00:00:00+08:00",
"dev_test_result": "bfghn",
"dev_test_time": "2022-03-07T09:11:18+08:00",
"dev_tester": "fgh",
"dev_tester_jobnum": "fds",
"data": [
{
"Id": 33,
"devdata_test_data": "kk,",
"devdata_test_item": "rteg",
"devdata_test_device_id": 4,
"data": null
},
{
"Id": 34,
"devdata_test_data": "bffgsdf",
"devdata_test_item": "qweqrtew",
"devdata_test_device_id": 4,
"data": null
}
]
},
{
"Id": 3,
"dev_imei": "222222222266441",
"dev_producer": "Manufacturer Name",
"dev_producer_name": "smart_city_cover",
"dev_producer_time": "2022-03-05T00:00:00+08:00",
"dev_test_result": "bfghn",
"dev_test_time": "2022-03-07T09:11:18+08:00",
"dev_tester": "fgh",
"dev_tester_jobnum": "fds",
"data": [
{
"Id": 31,
"devdata_test_data": "kk,",
"devdata_test_item": "rteg",
"devdata_test_device_id": 3,
"data": null
},
{
"Id": 32,
"devdata_test_data": "bffgsdf",
"devdata_test_item": "qweqrtew",
"devdata_test_device_id": 3,
"data": null
}
]
}
],
"total": 4
}
}
限制页码查询
current 代表页数
pageSize 代表每页显示几个
http://localhost:8080/v1/testDeviceData?pageSize=2¤t=1
{
"code": 0,
"msg": "success",
"data": {
"data": [
{
"Id": 6,
"dev_imei": "222222222264456",
"dev_producer": "Manufacturer Name",
"dev_producer_name": "smart_city_cover",
"dev_producer_time": "2022-03-05T00:00:00+08:00",
"dev_test_result": "ko",
"dev_test_time": "2022-03-09T08:41:45+08:00",
"dev_tester": "fgh",
"dev_tester_jobnum": "fds",
"data": [
{
"Id": 61,
"devdata_test_data": "ui,",
"devdata_test_item": "rteg",
"devdata_test_device_id": 6,
"data": null
},
{
"Id": 62,
"devdata_test_data": "bffgsdf",
"devdata_test_item": "qweqrtew",
"devdata_test_device_id": 6,
"data": null
}
]
},
{
"Id": 5,
"dev_imei": "222222222264453",
"dev_producer": "Manufacturer Name",
"dev_producer_name": "smart_city_cover",
"dev_producer_time": "2022-03-05T00:00:00+08:00",
"dev_test_result": "bfghn",
"dev_test_time": "2022-03-07T09:11:18+08:00",
"dev_tester": "fgh",
"dev_tester_jobnum": "fds",
"data": [
{
"Id": 49,
"devdata_test_data": "kk,",
"devdata_test_item": "rteg",
"devdata_test_device_id": 5,
"data": null
},
{
"Id": 50,
"devdata_test_data": "bffgsdf",
"devdata_test_item": "qweqrtew",
"devdata_test_device_id": 5,
"data": null
}
]
}
],
"total": 4
}
}
m2m
后面同事跟我说有个多对多模型定义,我摸了半天没摸懂,看了go - 在beego orm中插入具有m2m的模型文章仿写了下
开始我一直折腾模型定义的rel_table和rel_through,以及参考文章后面发现没有调用m2m,我也不知道啥问题
func M2mTest() {
o := orm.NewOrm()
var data TestData
data.DataTestData = "CoolDude"
id, err := o.Insert(&data)
if err != nil {
log.Printf(err.Error())
} else {
log.Printf("Player ID: %v", id)
}
var device TestDevice
id, err = o.Insert(&device)
if err != nil {
log.Printf(err.Error())
} else {
log.Printf("Game ID: %v", id)
}
m2m := o.QueryM2M(&device, "DevGetJsonData")
num, err := m2m.Add(data)
fmt.Println(m2m.Add(data))
if err == nil {
log.Printf("Added nums: %v", num)
}
// m2m.Remove(63)
}