2015-03-17 16 views
6

Mein Problem ist, dass ich nicht herausfinden kann, wie Multilevel-Beziehungsstrukturen in einer Anfrage mit LoopBack-Backend zu bekommen. Ich habe 3 Modelle: Continent, Country, County. Was ich gerne tun würde ist, einen Kontinent zu bekommen und alle Länder und alle Bezirke in sich aufzunehmen.Multi-Level-Include-Filter mit LoopBack JS

Die Beziehung zwischen ihnen:

  • Continent hasMany Country, undCountry belongsTo Continent
  • Country hasMany County, undCounty belongsTo Country

der API-Aufruf REST So zu /api/Continent/1 kehrt

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

Jetzt möchte ich die Länder und Kreise alle mit dem Continent bekommen, so dass ich eine Anfrage an /api/Continent/1?filters[include]=country

Trotzdem ich nicht die countys bekommen.

Welche Art von Abfrage sollte ich machen, um eine Liste zu erhalten, die beide Relationsebenen enthält? So:

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

Vielen Dank für Ihre Hilfe!

+0

Warum wurde dieses Downvoted? Ich habe versucht, es so klar wie möglich zu machen und würde mich freuen, weitere Verbesserungen zu machen. –

+0

Scheint das Duplikat von http://stackoverflow.com/questions/26997368/loopback-2-4-how-to-query-certain-fields-of-related-model-via-rest-api – IvanZh

+0

Dies ist kein Duplikat . Es ist auch eine sehr gültige Frage. Ich wünschte, jemand hätte die Antwort darauf. Mit dem gleichen Problem konfrontiert! –

Antwort

4

Die Syntax ist:

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

Hallo Hoffnung, es ist nicht zu spät für eine Antwort. Nach einem gründlichen Spiegeln ihrer Dokumente zu diesem Thema schrieb ich eine Remote-Methode, um diese tiefen Ebenen zu erreichen. Es ist nicht so klar, wie es auf der REST-API-Ebene zu tun ist.

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'} 
}); 

Ich habe hinzugefügt, zwischen ein paar zusätzliche Abfrage-String-Parameter Grenze, Ordnung und überspringen zu ermöglichen pagnination und ordering..but kein muss :)

Auch dies wird vorausgesetzt, Sie haben bereits Beziehungstypen definiert Kontinent und Land, dann Land und Grafschaft.