我知道这是非常基本的,但我认为[beego网站]上的官方文档[1]
[1]:http://beego.me/docs/mvc/model/query.md没有给出明确的指示。
我使用beego框架创建了一个RESTful API。正如它所承诺的那样,它为我的应用程序生成基本的CRUD代码。问题是READ方法没有返回所有数据。根据所有数据,我的意思是表中的数据,包括与其相关的所有表中的数据。
这是生成代码的输出(我使用swagger来调用它):
{
"data": [
{
"Id": 1,
"CustomerId": {
"Id": 2,
"Name": "",
"Phone": "",
"Email": "",
"CreatedAt": "0001-01-01T00:00:00Z",
"UpdatedAt": "0001-01-01T00:00:00Z"
},
"Saldo": 2500000,
"CreatedAt": "2014-12-10T08:10:10+07:00",
"UpdatedAt": "2014-12-10T08:10:10+07:00"
}
],
"totals": 1
}
看,它没有返回姓名,电话和电子邮件。 所以我查看文档并发现这个方法RelatedSel()但我仍然不知道如何正确使用它。
这是我的代码:
func GetAllCustomerSaldo(query map[string]string, fields []string, sortby []string, order []string,
offset int64, limit int64) (ml []interface{}, err error, totals int64) {
o := orm.NewOrm()
qs := o.QueryTable(new(CustomerSaldo))
qs.RelatedSel("CustomerId__Customers").All(&CustomerSaldo{})
...
尝试了很多参数后,我仍然会收到此错误:
Handler crashed with error unknown model/table name `Customers`
这里有人和我有同样的问题吗?任何解决方案的人?
答案 0 :(得分:1)
我遇到了一个稍微不同的问题,但我找到的解决方案也可以解决这个问题。我在这里找到解决方案https://github.com/astaxie/beego/issues/1258
您需要调用不带参数的qs.RelatedSel()(或使用int参数,响应深度关系选择)并为每条记录手动调用LoadRelated
func GetAllCustomerSaldo(query map[string]string, fields []string, sortby []string, order []string,
offset int64, limit int64) (ml []interface{}, err error, totals int64) {
o := orm.NewOrm()
qs := o.QueryTable(new(CustomerSaldo))
qs.RelatedSel().All(&CustomerSaldo{})
...
}
o := orm.NewOrm()
for _, el := range arr {
o.LoadRelated(el, "CustomerId")
}
RelatedSel就像LeftOuterJoin
答案 1 :(得分:0)
在RelatedSel之后不需要LoadRelated-因为RelatedSel会在对db的一个请求中自动获取数据(当然,如果正确使用了它)。 LoadRelated-执行相同操作,但在其他请求中。当您使用RelatedSel时,在执行LoadRelated之后-您将执行两次操作。
orm.Debug = true
o := orm.NewOrm()
qs := o.QueryTable(&models.MainModel{})
var req []*models.RelatedModel
num, err := qs.RelatedSel().All(&req)
beego.Debug(num)
if err != nil {
beego.Error(err)
}