php - 使用类别、子类别和进一步的子类别 laravel 为多维数组创建 API
问题描述
我必须为 react js 中使用的动态菜单创建 API。该菜单包含类别、子类别和进一步的子类别。我已经创建了代码,但它没有按预期工作。
所需的输出是,
{
"data": [
{
"id": 15,
"name": "category 1",
"slug": "category-1",
"subcategory": [
{
"sub_id": 15,
"sub_name": "subcategory 1",
"sub_slug": "subcategory-1"
"fsubcategory": [
{
"fsub_id": 15,
"fsub_name": "fsubcategory 1",
"fsub_slug": "fsubcategory-1"
},
...
]
},
...
]
},
....
]
}
我用来创建上述结果的代码是,
$list = Category::select('id', 'name', 'slug')->where(array('in_menu' => 1, 'status' => 1, 'deleted_at' => null))->orderBy('id', 'desc')->get();
$data = [];
foreach ($list as $category) {
$sublist = Subcategory::select('id', 'name', 'slug')->where(array('category_id' => $category->id, 'status' => 1, 'deleted_at' => null))->orderBy('id', 'desc')->get();
$item = [
"id" => $category->id,
"name" => $category->name,
"slug" => $category->slug,
"subcategory" => [],
];
foreach($sublist as $subcategory) {
$fsublist = Fsubcategory::select('id', 'name', 'slug')->where(array('category_id' => $category->id, 'subcategory_id' => $subcategory->id, 'status' => 1, 'deleted_at' => null))->orderBy('id', 'desc')->get();
$item["subcategory"][] = [
"sub_id" => $subcategory->id,
"sub_name" => $subcategory->name,
"sub_slug" => $subcategory->slug,
"fsubcategory" => [],
];
foreach($fsublist as $fsubcategory) {
$item["subcategory"][]["fsubcategory"] = [
"fsub_id" => $fsubcategory->id,
"fsub_name" => $fsubcategory->name,
"fsub_slug" => $fsubcategory->slug,
];
}
}
$data[] = $item;
}
return response()->json(['data' => $data]);
但是上面的代码没有得到所需的输出。上述代码的输出是,
{
"data": [
{
"id": 11,
"name": "dhdf dfheryer",
"slug": "dhdf-dfheryer",
"subcategory": [
]
},
{
"id": 10,
"name": "dfhdfdf hery1----",
"slug": "fhdfdf-hery1",
"subcategory": [
{
"sub_id": 5,
"sub_name": "sdgwet gjsdg",
"sub_slug": "sdgwet-gjsdg",
"fsubcategory": [
]
}
]
},
{
"id": 1,
"name": "dfhdfh",
"slug": "dfhdf",
"subcategory": [
{
"sub_id": 7,
"sub_name": "FSubcategory 1",
"sub_slug": "fsubcategory-1",
"fsubcategory": [
]
},
{
"sub_id": 2,
"sub_name": "Test Subcategory",
"sub_slug": "test-subcategory",
"fsubcategory": [
]
},
[
{
"fsubcategory": {
"fsub_id": 2,
"fsub_name": "dfhdf dfhdfh",
"fsub_slug": "dfhdf-dfhdfh"
}
}
],
{
"sub_id": 1,
"sub_name": "ssdgsdg",
"sub_slug": "sgsdg",
"fsubcategory": [
]
},
[
{
"fsubcategory": {
"fsub_id": 3,
"fsub_name": "dfdfh",
"fsub_slug": "dfdfh"
}
}
],
[
{
"fsubcategory": {
"fsub_id": 1,
"fsub_name": "fdfd",
"fsub_slug": "fdfd"
}
}
]
]
}
]
}
fsubcategory
在外面subcategory
。如何获得所需的输出。如何修改代码以获得正确的结果。我真的被困在这里了。
解决方案
我得到了答案,
$list = Category::select('id', 'name', 'slug')
->where([
'in_menu' => 1,
'status' => 1,
'deleted_at' => null
])
->orderBy('id', 'desc')
->get();
$data = [];
foreach ($list as $category) {
$sublist = Subcategory::select('id', 'name', 'slug')
->where([
'category_id' => $category->id,
'status' => 1,
'deleted_at' => null
])
->orderBy('id', 'desc')
->get();
$item = [
"id" => $category->id,
"name" => $category->name,
"slug" => $category->slug,
"subcategory" => [],
];
foreach ($sublist as $subcategory) {
$fsublist = Fsubcategory::select('id', 'name', 'slug')->where(array('subcategory_id' => $subcategory->id, 'status' => 1, 'deleted_at' => null))->orderBy('id', 'desc')->get();
$subitems = [];
foreach ($fsublist as $fsubcategory) {
$subitems[] = [
"fsub_id" => $fsubcategory->id,
"fsub_name" => $fsubcategory->name,
"fsub_slug" => $fsubcategory->slug,
];
}
$item["subcategory"][] = [
"sub_id" => $subcategory->id,
"sub_name" => $subcategory->name,
"sub_slug" => $subcategory->slug,
"fsubcategory" => $subitems,
];
}
$data[] = $item;
}
return response()->json(['response' => 200, 'data' => $data]);
这将提供所需的输出
推荐阅读
- clang++ - 如何使用clang获取标准库c++进行交叉编译
- entity-framework-plus - Entity Framework Plus - 使用 IncludeFilter 和 Include
- typescript - TypeScript 从类型中过滤掉类型
- vue.js - 如何在一个vue项目中同时使用多个app?
- angular - Nativescript Angular将字体真棒图标代码注入字段
- c - C中的字符串比较与运算符
- javascript - 如何使用 PHP while 语句迭代将触发模式弹出窗口的按钮
- html - 网站内容位于工具栏旁边而不是下方
- python - 使用名为“type”的属性验证 json
- android - 内部带有其他组件的按钮