【问题标题】:How can I Implement recursive join using loopback self relations?如何使用环回自关系实现递归连接?
【发布时间】:2016-05-27 09:46:33
【问题描述】:

如何在 strongloop 中使用自连接创建父子层次结构。我已将模型名称创建为菜单。

menu.json

{
  "name": "Menu",
  "base": "PersistedModel",
  "strict": false,
  "idInjection": false,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "MenuID": {
      "type": "Number",
      "id": true,
      "required": true
    },
    "Name": {
      "type": "string"
    },
    "ParentMenuID": {
      "type": "Number"
    }
  },
  "validations": [],
  "relations": {

    "menus": {
      "type": "hasMany",
      "model": "Menu",
      "foreignKey": "ParentMenuID",
    }
  },
  "acls": [],
  "methods": {}
}

表格数据如:

menuId  Name     ParentID
1       parent      0
2       child       1
3      grandchild   2   

我尝试使用过滤器调用 REST API,但我得到了一级数据,例如 http://localhost:3000/api/Menus/?filter[include]=menus

 [
  {
    "MenuID": 1,
    "Name": "parent",
    "ParentMenuID": 0,
    "menus": [
      {
        "MenuID": 2,
        "Name": "child",
        "ParentMenuID": 1
      }
    ]
  },
  {
    "MenuID": 2,
    "Name": "child",
    "ParentMenuID": 1,
    "menus": [
      {
        "MenuID": 3,
        "Name": "grandchild",
        "ParentMenuID": 2
      }
    ]
  },
  {
    "MenuID": 3,
    "Name": "grandchild",
    "ParentMenuID": 2,
    "menus": []
  }
]

但我需要如下输出:

[
  {
    "MenuID": 1,
    "Name": "parent",
    "ParentMenuID": 0,
    "menus": [
      {
        "MenuID": 2,
        "Name": "child",
        "ParentMenuID": 1,
        "menus": [
          {
            "MenuID": 3,
            "Name": "grandchild",
            "ParentMenuID": 2
          }
        ]
      }
    ]
  }
]

请提出任何想法或示例。

【问题讨论】:

    标签: javascript json node.js loopbackjs strongloop


    【解决方案1】:

    使用slc loopback:model 创建模型后,只需运行slc loopback:relation 并将selfjoin 创建为关系。

    正如您现在在更新的问题中所做的那样。要包含另一个您使用include filterhttp://localhost:3000/api/Menus/?filter[include]=menus 并包含两个级别,您可以这样做:http://localhost:3000/api/Menus/?filter[include][menus]=menus

    【讨论】:

    • 你能举个小例子吗?以及如何为此做rest cal?
    • 您应该尝试自己解决这个问题。 StackOverflow 不是人们为您工作的地方。请发布您迄今为止尝试过的内容,以及您遇到的问题。
    • 我在 slc loopback:relation 中没有找到自我关系。
    • 自关系不是特殊类型。只需对同一模型使用正常关系即可。
    • 感谢您的回复,我是 strongloop 新手,您能推荐任何示例或教程吗,我正在尝试使用单个模型制作父子层次结构。
    【解决方案2】:

    假设您有一个模型评论、图像,并且您希望它们之间的关系是评论应该有多个图像。然后你必须在两个模型的 json 文件中定义这个关系

    Review.json
      "relations": {
        "images": {
          "type": "hasMany",
          "model": "Image",
          "foreignKey": ""
        }
      }
    
    Image.json
      "relations": {
        "hotelReview": {
          "type": "belongsTo",
          "model": "HotelReview",
          "foreignKey": ""
        }
    }
    

    您也可以在创建两个模型后使用slc loopback:relation 完成相同的操作。

    现在为了使用此关系或连接提取数据,您可以使用环回提供的过滤器api,特别是使用环回提供的include

    环回的示例链接包括和过滤 api

    https://docs.strongloop.com/display/public/LB/Include+filter https://docs.strongloop.com/display/public/LB/Querying+data

    示例过滤器 api,使用 include :-

    localhost:3000/api/Review?filter[where][email]=xyz@abc.com&filter[include]=images
    

    【讨论】:

    • 感谢您的回复。我只有一个模型我正在尝试创建自我加入并制作父子层次结构,请查看此链接w3resource.com/sql/joins/perform-a-self-join.php
    • 在您的示例中,您提到了 2 个不同的表,emp1 和 emp2,这让我感到困惑。
    • 哦,我真的很抱歉造成这种混乱,实际上这是 sql 自连接概念单表考虑为两个表进行自连接。我希望你现在明白我的意思了,你能提出任何想法吗?
    猜你喜欢
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多