递归函数获取具有父子关系的嵌套项

我想从 Laravel 7 中的 MySQL 表中获取嵌套类别数据。


这是 MySQL 表:


------------------------

|id | name | parent_id |

|---|------|-----------|

| 1 |   A  |   NULL    |

|---|------|-----------|

| 2 |   B  |   NULL    |

|---|------|-----------|

| 3 |   C  |   NULL    |

|---|------|-----------|

| 4 |  a   |     1     |

|---|------|-----------|

| 5 |  ab  |     4     |

|---|------|-----------|

| 6 |  bc  |     4     |

|---|------|-----------|

| 7 |  ca  |     4     |

|---|------|-----------|

| 8 |   b  |     2     |

|---|------|-----------|

| 9 |  2b  |     8     |

|---|------|-----------|

|10 |  3b  |     8     |

|---|------|-----------|

|11 |   c  |     3     |

|---|------|-----------| 

我想要以下输出:


A

a

ab

bc

ca

B

b

2b

3b

C

c

我当前的代码(在控制器中)是:


public function sort_category($data, $opt){      

        $contents = Category::where('category_id', $data)->get();

        foreach($contents as $c){

            $opt .= "<option value='".$c->id."'>".$c->name."</option>";

            $count = Category::where('category_id', $c->id)->count();

            if($count > 0){

                return $this->sort_category($c->id, $opt);

            }


        }


    return $opt;

}


public function add_category_form(){

    $opt = '';

    $html = $this->sort_category(NULL, $opt);

    return view('admin.add_category', ['categories' => $html]);


}

电流输出:


A

a

ab

bc

ca

正如您所看到的,它不会迭代 B 和 C。任何帮助都会受到赞赏。


慕森卡
浏览 89回答 1
1回答

蛊毒传说

foreach 循环中有一个 return 语句。这会导致仅category_id处理第一个值,而不处理其他值。您不应该直接返回,而是将返回值存储在例如数组中,然后在循环之后返回。
打开App,查看更多内容
随时随地看视频慕课网APP