我的数组输出是树状结构,如下所示:
在这里,我有一个父子关系的数据库表,如:
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个用于测试目的。
以下是我的示例数据库记录:
我在控制器中以递归方式获得了上述树结构:
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
感谢任何形式的帮助。
答案 0 :(得分:0)
我将向您推荐laravel-nestedset包,这将使您的生活变得非常简单,请按照包文档创建表结构,检索,保存和更新递归数据将非常简单。这是包裹链接。