问题描述
我正在尝试创建一个REST API,使公司中的所有员工都按层次结构顺序返回(没有经理的员工在基础树中,而他们管理的人员就在他们的下面,并且等等。
在从存储库中调用数据时,我在过滤器中包含了employee []关系和一个相同的嵌套关系。当前,对雇员的呼叫仅发生在前两层,而employee []关系未显示在第三层上,因此在此之后无法查看这些层。
filter = {
include: [
{
relation: 'employees',scope: {
include: [{relation: 'employees'}],},],where: {managerId: -1},};
有没有一种方法可以声明此过滤器,以便它可以扩展到层次结构可能包含的所有层?还是我必须添加我认为需要的新范围?
解决方法
您可能无法在单个filter子句中实现此目标。更好地递归获取每一层的基础员工。
编辑 实际上,如果我们知道可以有多少个最大图层,我们确实可以在filter子句中进行递归。当没有更多的子层时,它也会破坏递归。然后您的filter子句看起来像
let filter = {
include: {
relation: 'employees'
},where: {managerId: -1},};
let childLayer = {
relation : 'employees'
};
let previousLayer = filter.include;
for(let i=0; i<=10; i++){ //do this for 10 layers
previousLayer.scope = {
include : JSON.parse(JSON.stringify(childLayer)) //to avoid reference carry forwards
};
previousLayer = previousLayer.scope.include;
}
//do the query here using filter object