2

我知道这是非常基本的,但我认为 [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`

这里有人和我有同样的问题吗?有什么解决方案吗?

4

2 回答 2

1

我有一个稍微不同的问题,但我找到的解决方案也可以帮助解决这个问题。我在这里找到了解决方案https://github.com/ataxie/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

于 2016-12-02T09:19:14.330 回答
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)
  }
于 2020-02-10T17:16:37.433 回答