2015-03-17 14 views
6

Moim problemem jest to, że nie mogę wymyślić, jak uzyskać wielopoziomowe struktury relacji w jednym żądaniu z backendem LoopBack. Mam 3 modele: Continent, Country, County. Chciałbym zdobyć kontynent i otrzymać wszystkie kraje i wszystkie hrabstwa.Filtr wielopoziomowy obejmuje filtr z LoopBack JS

Zależność między nimi:

  • Continent hasMany Country, iCountry belongsTo Continent
  • Country hasMany County, iCounty belongsTo Country

więc wywołanie API REST do /api/Continent/1 zwrotów

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

Teraz chcę, aby wszystkie kraje i powiatów z Continent, więc robię zapytanie do /api/Continent/1?filters[include]=country

Nadal nie dostać countys.

Jakiego rodzaju zapytań należy dokonać, aby uzyskać listę obejmującą oba poziomy relacji? W ten sposób:

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

Dzięki za pomoc!

+0

Dlaczego ten downvoted? Starałem się, aby było to tak jasne, jak to tylko możliwe, i z chęcią dokonam dalszych ulepszeń. –

+0

Wygląda na duplikat http://stackoverflow.com/questions/26997368/loopback-2-4-how-to-query-certain-fields-of-related-model-via-rest-api – IvanZh

+0

To nie jest duplikat . To także bardzo ważne pytanie. Chciałbym, żeby ktoś miał na to odpowiedź. Wobec tego samego problemu! –

Odpowiedz

4

Składnia jest następująca:

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

Witam, mam nadzieję, że odpowiedź nie będzie za późna. Po dokładnym przejrzeniu swoich dokumentów wewnątrz i na zewnątrz w tej sprawie, skończyło się na pisaniu zdalnej metody, aby osiągnąć ten głęboki poziom wielokrotny. Nie jest tak jasne, jak to zrobić na poziomie 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'} 
}); 

Dodałem kilka dodatkowych parametrów ciąg kwerendy granica, porządku i pominąć włączyć pagnination i ordering..but nie trzeba :)

Również to zakładając, że już zdefiniowane typy relacja pomiędzy Kontynent i kraj, a następnie kraj i powiat.