【问题标题】:Recursive function to get nested items with parent-child relations获取具有父子关系的嵌套项的递归函数
【发布时间】:2020-10-11 14:33:00
【问题描述】:

我想从 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。感谢任何帮助。

【问题讨论】:

  • 你能解释一下你的输出吗?
  • 我希望所有子项都出现在它的父项之后。如您所见,abbccaa 的子代。因此它们出现在a 之后。并且a 也是A 的孩子。所以a 出现在A 之后。

标签: php mysql laravel recursion laravel-7


【解决方案1】:

你在 foreach 循环中有一个 return 语句。

这会导致只处理带有category_id 的第一个值,而不处理其他值。

你不应该直接返回,而是将返回值存储在一个数组中,并在循环之后返回。

【讨论】:

  • 谢谢!那个不成熟的return确实是个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 2018-05-28
  • 2016-10-26
相关资源
最近更新 更多