如何在Loopback 4中包括所有潜在图层的嵌套关系?

问题描述

我正在尝试创建一个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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...