我的问题是我无法弄清楚如何使用LoopBack后端在一个请求中获得多级关系结构。我有3个模型:Continent
,Country
,County
。我想做的是获得一个大陆,接收所有国家和所有国家。
他们之间的关系:
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"},
...
],
...
]
}
感谢您的帮助!
答案 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。