Многоуровневый фильтр включения с LoopBack JS

Моя проблема в том, что я не могу понять, как получить многоуровневые структуры отношений в одном запросе с бэкэндом LoopBack. У меня 3 модели: Continent, Country, County. Что я хотел бы сделать, так это ПОЛУЧИТЬ континент и получить все страны и все округа внутри него.

Отношения между ними:

  • Continent hasMany Country, и Country принадлежит Continent
  • Country hasMany County, и County принадлежит Country

Таким образом, вызов API REST для /api/Continent/1 возвращает

{
   "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"},
      ...
    ],
    ...
  ]
}

Спасибо за вашу помощь!


person Mihaly KR    schedule 17.03.2015    source источник
comment
Почему это было отклонено? Я постарался сделать это как можно более понятным и буду рад внести дальнейшие улучшения.   -  person Mihaly KR    schedule 17.03.2015
comment
Кажется, дубликат заголовка stackoverflow.com/questions/26997368/   -  person IvanZh    schedule 19.03.2015
comment
Это не дубликат. Это тоже очень актуальный вопрос. Желаю, чтобы у кого-нибудь был ответ. Столкнувшись с той же проблемой!   -  person Anoop.P.A    schedule 12.09.2015


Ответы (2)


Синтаксис:

/api/Continent/1?filter={"include": {"country": "countys"}}
person conradj    schedule 24.09.2015

Привет, надеюсь, еще не поздно для ответа. После тщательного просмотра их документации по этой проблеме я закончил тем, что написал удаленный метод для достижения этого множественного включения глубокого уровня. Не очень понятно, как это сделать на уровне 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'}
});

Я добавил некоторые дополнительные параметры строки запроса limit, order и skip, чтобы включить разбиение на страницы и упорядочивание… но это не обязательно :)

Также предполагается, что у вас уже есть типы отношений, определенные между континентом и страной, затем страной и округом.

person Opiyo Adamsy    schedule 24.09.2015