如何在laravel刀片中递归显示树状结构?

时间:2017-05-28 04:16:11

标签: arrays laravel recursion

我的数组输出是树状结构,如下所示:

enter image description here

在这里,我有一个父子关系的数据库表,如:

public function up()
{
     Schema::create('trees', function (Blueprint $table) {
         $table->increments('id');
         $table->integer('parent_id')->unsigned()->nullable();
         $table->string('name');
         $table->integer('has_child');
         $table->integer('depth');
         $table->timestamps();
         $table->foreign('parent_id')->references('id')->on('trees')->onDelete('cascade');
    }
}

在这里,

深度定义树中根的深度,parent_id表示同一表中的父级,has_child定义子级的存在。对于叶子,has_child为零,顶部parent_id为null。

深度可以是最多5的任何值。 在上述情况下,只有2个用于测试目的。

以下是我的示例数据库记录:

enter image description here

我在控制器中以递归方式获得了上述树结构:

    public function getChilds($d){
        $tree = array();
        $children = array();
        $tree['parent'] = $d->toArray();
        if($d->has_child==1){
            $data = Tree::where('parent_id',$d->id)->get();
            foreach ($data as $d) {
                $first = $this->getChilds($d);
                array_push($children, $first);
            }
        }
        $tree['children'] = $children;
        return $tree;
    }

    public function getTree(){
        $tree = array();
        $data = Tree::where('parent_id',null)->get();
        foreach ($data as $d) {
            $first = $this->getChilds($d);
            array_push($tree, $first);
        }
        return view('tree',compact('tree'));
    }

现在,

我想在树状结构中显示这些数据。但是,由于深度不同,我无法弄清楚我应该去的深度。

有没有办法在laravel刀片中递归显示这种结构?

预期输出是这样的:

One0

    One0Two0

        One0Two0Three0

        One0Two0Three1

    One0Two1

        One0Two1Three0

        One0Two1Three1

    One0Two2

        One0Two2Three0

        One0Two2Three1

感谢任何形式的帮助。

1 个答案:

答案 0 :(得分:0)

我将向您推荐laravel-nestedset包,这将使您的生活变得非常简单,请按照包文档创建表结构,检索,保存和更新递归数据将非常简单。这是包裹链接。

https://github.com/lazychaser/laravel-nestedset