如何使用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
}
]
}
]
}
]
请提出任何想法或示例。
答案 0 :(得分:1)
使用slc loopback:model
创建模型后,只需运行slc loopback:relation
并将selfjoin创建为关系。
正如您现在在更新的问题中所做的那样。要包含其他人,请使用include filter,http://localhost:3000/api/Menus/?filter[include]=menus
并包含两个级别,您可以这样做:http://localhost:3000/api/Menus/?filter[include][menus]=menus
答案 1 :(得分:0)
假设您有一个模型评论,图像以及它们之间想要的关系,那么评论应该有多个图像。然后你必须在两个模型的json文件中定义这种关系
Review.json
"relations": {
"images": {
"type": "hasMany",
"model": "Image",
"foreignKey": ""
}
}
Image.json
"relations": {
"hotelReview": {
"type": "belongsTo",
"model": "HotelReview",
"foreignKey": ""
}
}
创建两个模型后,您也可以使用slc loopback:relation
完成相同的操作。
现在,为了使用此关系或连接提取数据,您可以使用loopback提供的过滤器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