简体   繁体   中英

How to get child under sub-category and sub-category user category in JSON Laravel

This very common question but I am not able to make it in JSON Format for API. I a Table Category where I stored three layers of Category. Category->subcategory->child. I want to get this in API in Format.

Something like.

Category

  sub-category-1
  sub-category-2 
      child-2-1
      child-2-2
  sub-category-3

I try with code

  $allData = array();
            // get all parent category 
            $categories = Category::where(['status' => 1, 'parent_id' => 0])->get();        
            foreach ($categories as $key=>$sub) {
                    // now take one by one it's child category 
                    $allData[$key]['parent'] = $sub->name;
                    $subCategory = Category::where('status', 1)->where('parent_id', '=', $sub->id)->get();
                    $subCat = array();
                    // set parent category title
                    foreach ($subCategory as $k=>$subcat) {
                        $subCat[$subcat->id] = $subcat->name;

                    }
                    // set subcategory array
                    $allData[$key]['subcategory'] = $subCat;
            }
           return $allData;

I got this result not I don't know how to get child value

在此处输入图片说明

database look like

在此处输入图片说明

Here is how you can do it.

 $allData = array();
        // get all parent category 
        $categories = Category::where(['status' => 1, 'parent_id' => 0])->get();        
        foreach ($categories as $key=>$sub) {
                // now take one by one it's child category 
                $allData[$key]['parent'] = $sub->name;
                $subCategory = Category::where('status', 1)->where('parent_id', '=', $sub->id)->get();
                $subCat = array();
                // set parent category title
                foreach ($subCategory as $k=>$subcat) {
                    $subCat[$subcat->id] = $subcat->name;
                    //children of subcat 
                    $children = Category::where('status', 1)->where('parent_id', '=', $subcat->id)->get();  
                    $child = array();
                    if($children){
                        foreach($children as $k1=>$val){
                             $child[$val->id] = $val->name;
                             $allData[$key]['subcategory'][$subcat->id]['child'] = $child;
                        }
                    }

                }
                // set subcategory array
                $allData[$key]['subcategory'] = $subCat;
        }
       return $allData;

please try this way. convert your json into array and use this to get child values

$ar = json_decode($data,true);
foreach($ar as $value){
    echo $value['parent'].'<br>';
    foreach($value['child'] as $child){

       echo '&nbsp;'.$child.'<br>';
   }
 }

This will output this

test
 A
 B
 C
 D
 E
test1
 G
 H
 I
 J
 K

Finally, I solved this

       $parents = Category::where('parent_id', 0)->where('status', 1)->orderBy('sort_order', 'asc')->get();
        foreach ($parents as $parent) {
            $childs = Category::where('parent_id', $parent->id)->where('status', 1)->orderBy('sort_order', 'asc')->get();
            if (count($childs) > 0) {
                $subCat = array();
                $players = array();
                $roster[$parent->name] = $players;
                        foreach ($childs as $i => $child) {
                            $subchilds = Category::where('parent_id', $child->id)->where('status', 1)->orderBy('sort_order', 'asc')->get();
                            if (count($subchilds) > 0) {

                                $roster[$parent->name][$child->name] = $subCat;
                                foreach ($subchilds as $subchild) {

                                    $roster[$parent->name][$child->name][$subchild->id] = $subchild->name;
                                }

                            }else{
                                $roster[$parent->name][$child->name] = $players;
                            }
                        }

            }
        }
        return $roster;

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM