首页 > 解决方案 > 使用类别、子类别和进一步的子类别 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。如何获得所需的输出。如何修改代码以获得正确的结果。我真的被困在这里了。

标签: phplaravel

解决方案


我得到了答案,

$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]);

这将提供所需的输出


推荐阅读