多级包括使用LoopBack JS的过滤器

时间:2015-03-17 16:10:01

标签: loopbackjs strongloop

我的问题是我无法弄清楚如何使用LoopBack后端在一个请求中获得多级关系结构。我有3个模型:ContinentCountryCounty。我想做的是获得一个大陆,接收所有国家和所有国家。

他们之间的关系:

  • Continent hasMany Country Country belongsTo Continent
  • Country hasMany County County belongsTo Country

因此,对/api/Continent/1的REST api调用将返回

{
   "id": 1
   "name":"Europe"
}

现在,我希望使用Continent获取所有国家/地区,因此我对/api/Continent/1?filters[include]=country进行查询

不过,我还没有得到这些。

我应该采取什么样的查询来获取包含两个关系级别的列表?像这样:

{
  "id": 1,
  "name": "Europe",
  "country": [
    id: 1,
    name:"United Kingdom",
    county:[
      {id:1,name:"Avon"},
      {id:2,name:"Bedfordshire"},
      ...
    ],
    ...
  ]
}

感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

语法为:

/api/Continent/1?filter={"include": {"country": "countys"}}

答案 1 :(得分:2)

你好,希望答案还不算太晚。在彻底翻转他们的文档内部和外部关于这个问题之后,我最终编写了一个远程方法来实现深层次的多重包含。它还不太清楚如何在REST api级别进行处理。

Continent.listContinents = function(limit,skip,order,cb) {
Continent.find({
  limit:limit,
  skip:skip,
  order:order,
  include:[{country:'county'}],
}, cb);
};

Continent.remoteMethod('listContinents', {
description:"List continents. Include the related country and county information",
returns: {arg: 'continents', type: 'array'},
accepts: [{arg: 'limit', type: 'number', http: { source: 'query'  }},
          {arg: 'skip', type: 'number', http: { source: 'query'  }},
          {arg: 'order', type: 'string', http: { source: 'query'  }}],
          http: {path:'/list', verb: 'get'}
});

我添加了一些额外的查询字符串参数限制,订单和跳过以启用pagnination和ordering ..但不是必须的:)

此外,假设您已经在Continent和Country之间定义了关系类型,然后是Country和County。