Chcę zapytać o rekordy od określonego modelu poprzez REST-Api z LoopBack -application. Również chcę dołączyć obiekty pokrewne za pomocą filtra włączania. Działa to dobrze, ale zwraca WSZYSTKIE powiązane obiekty. Czy jest możliwe ich ograniczenie, a także uporządkowanie ich przez pole powiązanych obiektów?Jak ograniczyć rekordy relacji z funkcją sprzężenia zwrotnego w pętli sprzężenia zwrotnego?
Modele:
- DEPARTMENT
Fields:
- id
- name
- ...
Relations_ -> hasMany: Messages
Relations_ -> hasMany: Members
- MESSAGE
Fields:
- id
- senderId
- body
- ...
- MEMBER
Fields:
- id
- email
- ...
Zapytania:
Co chcę osiągnąć jest do kwerendy wszystkich działów ze wszystkich swoich członków, ale tylko ostatnia wiadomość sortowane według określonej dziedzinie (utworzony-timestamp).
Pierwsze podejście może być zwykły wariant query string z GET-Request:
http://loopback-server:3000/api/departments?filter[include]=members&filter[include]=messages
ta zwróci wszystkie działy ze wszystkimi wiadomościami i wszystkich członków. Jednak chciałbym, aby ograniczyć liczbę zwracanych komunikatów do ostatniego (lub ostatnich 5 lub cokolwiek, posortowane według określonego pola Message-modelu
Próbowałem też jsonfied składni kwerendy.
http://loopback-server:3000/api/departments?filter={"include":{"relation": "messages","limit":1}}
Niestety „granica” -parameter nie służy tu do relacji wiadomości.
Poniższy wariant powróci tylko pierwszy dział, czyli granica-param jest stosowany do działów model, a nie modelu relacja.
http://loopback-server:3000/api/departments?filter={"include":{"relation": "messages"},"limit":1}
Wtedy odkryłem zakresu-parameter i próbowałem to:
http://loopback-server:3000/api/departments?filter={"include":{"relation": "messages","scope":{"limit":1, "skip":0}}}
Daje to naprawdę dziwny wynik. To anuluje wszystkie wiadomości związane z działami, zamiast jednego konkretnego rekordu zwracającego jedną wiadomość (ma ponad 10), czego oczekiwałbym. Usunięcie parametru scope pokazuje, że działy rzeczywiście mają wiele komunikatów.
(wiem, że parametry adresu URL z tych wszystkich znaków specjalnych, takich jak { „:”} muszą być url zakodowane zostawiam go w czystości tu dla lepszej czytelności.)
Moje pytanie:
Jak uzyskać to zapytanie z pojedynczym żądaniem?
Proszę spojrzeć na https://loopback.io/doc/en/lb3/Include-filter.html#include-with-filters –