php - 菜单多类别数组的 API 响应结合 laravel
问题描述
我正在尝试为我的 react js 和 laravel 创建一个 API 作为后端。所以对于菜单,我有类别、子类别和进一步的子类别。我需要将所有结果组合如下,
{
"response": 200,
"data": [
{
"id": 15,
"name": "dfdfhdf rtuydf",
"slug": "dfdfhdf-rtuydf",
"subcategory": [
{
"sub_id": 15,
"sub_name": "dfdfhdf rtuydf",
"sub_slug": "dfdfhdf-rtuydf"
"fsubcategory": [
{
"fsub_id": 15,
"fsub_name": "dfdfhdf rtuydf",
"fsub_slug": "dfdfhdf-rtuydf"
},
...
]
},
...
]
},
....
]
}
我尝试使用以下代码,但结果未按预期显示。
$list = Category::select('id', 'name', 'slug')->where(array('in_menu' => 1, 'status' => 1, 'deleted_at' => null))->orderBy('id', 'desc')->get();
$array = [];
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();
$first = array("id" => $category->id, "name" => $category->name, "slug" => $category->slug);
array_push($array, array("category" => $first));
foreach($sublist as $subcategory) {
array_push($array, array("subcategory" => array("sub_id" => $subcategory->id, "sub_name" => $subcategory->name, "sub_slug" => $subcategory->slug)));
}
}
return response()->json(['response' => 200, 'data' => $array]);
上面代码的结果是,
{
"response": 200,
"data": [
{
"category": {
"id": 15,
"name": "dfdfhdf rtuydf",
"slug": "dfdfhdf-rtuydf"
}
},
{
"subcategory": {
"sub_id": 6,
"sub_name": "Test Subcategory 221",
"sub_slug": "test-subcategory-221"
}
},
]
}
如何达到要求的结果。我真的被困在这里了。
请检查以下代码以获取最近的输出。
$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('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["fsubcategory"][] = [
"fsub_id" => $fsubcategory->id,
"fsub_name" => $fsubcategory->name,
"fsub_slug" => $fsubcategory->slug,
];
}
}
$data[] = $item;
}
return response()->json(['response' => 200, 'data' => $data]);
解决方案
这应该这样做:
$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]);
推荐阅读
- http - 我应该在每个传入请求中创建新的上下文吗?
- amazon-web-services - API Gateway,我在哪里可以设置方法设置?
- java - 如何为 Azure Function TimerTrigger 实现单元测试
- ruby-on-rails - 不允许的参数问题 Ruby on Rails 5
- java - Spring Framework 的验证不适用于 JSR-303 验证
- python-3.x - 如何自定义 SOQL 日期格式
- python - 从数据框中删除列中的一些特定关键字并将其保存到 json
- continuous-integration - JFrog Xray 3.0 的计划是什么?
- apache-spark - 如何查找 Spark 集群的工作人员信息?
- f# - 为什么 F# 可区分联合无法使其 TypeConverter 受到 JSON.NET 的尊重,而其他类型却可以?