2017-02-22 5 views
5

Я хочу запросить записи из определенной модели с помощью REST-Api от LoopBack -Приложение. Также я хочу включить связанные объекты через include-фильтр. Это прекрасно работает, но возвращает ВСЕ связанные объекты. Можно ли их ограничить, а также упорядочить их полем связанных объектов?Как ограничить записи отношений с включенным фильтром в loopback?

Модель:

- DEPARTMENT 
    Fields: 
     - id 
     - name 
     - ... 
    Relations_ -> hasMany: Messages 
    Relations_ -> hasMany: Members 

- MESSAGE 
    Fields: 
     - id 
     - senderId 
     - body 
     - ... 

- MEMBER 
    Fields: 
     - id 
     - email 
     - ... 

запросы:

Что я хочу добиться того, чтобы запросить все отделы со всеми своими членами, но только последнее сообщение по заказу конкретного поля (сотворено метками времени).

Первый подход может быть простой строка запроса вариантом GET-запрос:

http://loopback-server:3000/api/departments?filter[include]=members&filter[include]=messages 

Это будет возвращать все отделы со всеми сообщениями и все членами. Тем не менее, я хотел бы ограничить число возвращаемых сообщений до последнего (или 5 последних или любой другой, отсортированные по конкретной области MESSAGE-модели

Я также попытался jsonfied синтаксис запроса:.

http://loopback-server:3000/api/departments?filter={"include":{"relation": "messages","limit":1}} 

К сожалению, параметр «limit» здесь не используется для связи сообщений.

Следующий вариант вернет только первый отдел, это означает, что limit-param применяется к модели подразделений, а не к модели отношений.

http://loopback-server:3000/api/departments?filter={"include":{"relation": "messages"},"limit":1} 

Тогда я обнаружил сферы параметрического и попытался это:

http://loopback-server:3000/api/departments?filter={"include":{"relation": "messages","scope":{"limit":1, "skip":0}}} 

Это дает очень странный результат. Это означает, что все сообщения, связанные с отделами, вместо одной конкретной записи, возвращающей одно сообщение (у него более 10), я бы ожидал. Удаление параметра scope показывает, что департаменты действительно имеют много сообщений каждый.

(я знаю, что параметры в URL со всеми этими специальными символами, такими как { «:»} должны быть URL-закодирован я оставляю его в чистоте здесь для лучшей читаемости.)

Мой вопрос:

Как достичь этого запроса с помощью одного запроса?

+1

Пожалуйста, обратите внимание на https://loopback.io/doc/en/lb3/Include-filter.html#include-with-filters –

ответ

2

Невозможно запросить отношения по их свойствам (пока). Что касается лимита, ваш последний подход с областью должен быть изменен немного:

"scope":{{"include":{"relation": "messages","limit":1, "skip":0}}} 

Здесь вы можете прочитать о запросах на отношения по своим свойствам:

https://github.com/strongloop/loopback/issues/517

+0

Не могу в это поверить! – octavian

1

Я не знаю, какая версия вам находятся в, но для Loopback 3

вы можете это сделать ..

include: { 
    { 
     relation: 'Messages', // include the messages object 
     scope: { // this is where you do a normal filter 
      where: {<whatevercondition>}, 
      order: "<fieldname> <ASC/DESC>", 
      limit:1, 
      include:{ 
       //yes, you can include 3rd level relation as well. 
      } 
     } 
    }, 
    { 
     relation: 'Members', // include the Members object 
     scope: { // further filter the related model 
      order: "<fieldname> <ASC/DESC>", 
      limit: <whateverlimityoument> 
     } 
    } 
} 
Смежные вопросы