Как рекурсивно отображать структуру дерева в лезвии laravel?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как рекурсивно отображать структуру дерева в лезвии laravel?

Сообщение Anonymous »

У меня есть выходной массив в виде древовидной структуры:

[img]https://i.sstatic .net/TV9Le.png[/img]


Здесь у меня есть таблица базы данных с отношениями родитель-потомок, например:

Код: Выделить всё

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');
}
}
Здесь

Глубина определяет глубину от корня дерева, а родительский_id относится к родительскому элементу в дереве. та же таблица, а has_child определяет существование дочернего элемента. Для листа has_child равно нулю, а для верхнего родительского_id равно нулю.

Глубина может иметь любое значение до 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
Любая помощь приветствуется.

Подробнее здесь: https://stackoverflow.com/questions/442 ... avel-blade
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»