2017-10-10 15 views
0

저는 두 개의 엔티티가 있습니다. 알파와 베타라고 부릅니다.하위 쿼리의 Breeze 조건부

베타에는 알파에 대한 외래 키가 있으므로 MyAlphaId이며 참조 속성 MyAlpha과 같이 1 : 다수의 관계가 있습니다.

Alphas 용으로 작성된 조건부가 있습니다.

var predicateAlpha = new Predicate('name', 'contains', 'somevalue'); 

나는 다음 베타의 그 myAlpha 속성은 그 조건과 일치하는 경우에 대한 쿼리에이를 "트랜스"할.

var predicateBeta = new Predicate('myAlpha', 'in', predicateAlpha); 

나는 다음과 같이 술어를 구성하는 나에게 능력을 알고 :

var predicateBeta = new Predicate('myAlpha.name', 'contains', 'somevalue'); 

내 문제는 내가 그 술어가 될 수있다 모르는 것입니다. 'concat('somefield', 'someotherfield')'과 같은 OData 함수가 포함될 수 있으므로 'myAlpha.'을 미리 보류 할 수는 없습니다.

나는 이것을 어떻게 달성 할 수 있는지에 대한 다른 생각이나 제안이 있습니까?

나를 위해, IN이이 일이 일어나는 것을 허용하는 술어를 받아들이는 것이 합리적이다. 나는 어떻게하면이 일이 일어날 지 생각할 수없는 술어를 받아들이는 소스 코드를 볼 수 없다.

답변

0

Alpha의 속성이 betas이라면 조건부를 사용하여 Alphas를 쿼리하고 expand Betas를 가져올 수 있습니다.

var query = em.createQuery(predicateAlpha).expand('betas'); 
var betas = []; 
em.executeQuery(query).then(queryResult => { 
    queryResult.results.forEach(alpha => { 
     betas = betas.concat(alpha.betas); 
    }); 
}); 
+0

그래, 그게 내 마음을 사로 잡았고, 실제로 내가 사용했던 그 주변의 일은 내 건축 프레임 워크 내에서 그 자체의 한계를 가져온다. –