2017-02-22 7 views
5

LoopBack -application의 REST-Api를 통해 특정 모델의 레코드를 쿼리하고 싶습니다. 또한 include 필터를 통해 관련 객체를 포함하고 싶습니다. 이 작동하지만 모든 관련된 개체를 반환합니다. 그것들을 제한 할 수 있고 또한 관련된 물체들의 필드에 의해 그들을 주문할 수 있습니까?루프백에 포함 필터가있는 관계 레코드를 제한하는 방법은 무엇입니까?

모델 :

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

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

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

조회 : 무엇 내가 달성하고자하는 모든 회원들과 모든 부서를 조회 할 수 있지만 특정 분야 (생성 - 타임 스탬프)로 주문한 경우에만 마지막 메시지

.

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

이 모든 메시지와 모든 회원들과 모든 부서를 반환합니다

첫 번째 방법

는 GET-요청의 일반 쿼리 문자열 변형 될 수있다. 그러나, 나는 MESSAGE 모델의 특정 필드를 기준으로 정렬 된 마지막 (또는 마지막 5이든, 반환 메시지의 수를 제한하고 싶습니다 나는 또한 jsonfied 쿼리 구문 시도

:.

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

불행하게도 "limit"매개 변수는 메시지의 관계에 사용되지 않습니다.

다음 변형은 첫 번째 부서 만 반환합니다. 이는 limit-param이 관계 모델이 아닌 departments-model에 적용됨을 의미합니다.

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

16,그럼 내가 -parameter 범위을 발견하고이 시도 : 이것은 정말 이상한 결과를 제공

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

합니다. 이것은 하나의 메시지를 반환하는 하나의 특정 레코드 (10 개 이상)를 반환하는 대신 부서와 관련된 모든 메시지를 무시합니다. scope-parameter를 제거하면 부서마다 실제로 많은 메시지가 있음을 알 수 있습니다.

내 질문 :

는 (. 더 나은 가독성을 위해 여기에 깨끗한두고 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

을 어떤 버전을 에 들어 있지만 루프백 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> 
     } 
    } 
}