У меня есть таблица категорий. Каждая категория может иметь необязательный родительский (по умолчанию 0, если нет родителя).
Что я хочу сделать, это построить простое дерево списка html с уровнями категорий.
Пример даты:
Foods
-- Fruit
---- Apple
---- Banana
---- Orange
-- Veg
---- Cucumber
---- Lettuce
Drinks
-- Alcoholic
---- Beer
---- Vodka
Misc
-- Household Objects
---- Kitchen
------ Electrical
-------- Cooking
---------- Stove
---------- Toaster
---------- Microwave
Обратите внимание, что это должно работать около 10 уровней. Я бы хотел, чтобы это было бесконечно, но я действительно не хочу идти по пути использования вложенной модели набора, поскольку это вызовет огромные задержки в этом проекте.
Документы по этому поводу для laravel ужасны, без реальной ссылки на то, где даже начать. Я играю с ним в течение нескольких дней, пытаясь понять, что делать, и, кажется, никуда не денется без огромного беспорядочного блока для каждой петли внутри друг друга 10 раз.
У меня есть мое дерево данных, используя в моей модели следующее:
<?php
class Item extends Eloquent {
public function parent()
{
return $this->hasOne('Item', 'id', 'parent_id');
}
public function children()
{
return $this->hasMany('Item', 'parent_id', 'id');
}
public function tree()
{
return static::with(implode('.', array_fill(0,10, 'children')))->where('parent_id', '=', '0')->get();
}
}
Это дает всем родителям и детям до уровня 10. Это отлично работает, но вы не можете делать что-либо с дочерними данными, не имея вручную 10 петель для каждого из них.
Что я здесь делаю неправильно? Неужели это не должно быть так сложно/плохо выполнено? Все, что я хочу сделать, это получить простой список html с элементами в древовидной структуре.
Я собрал быстрый пример SQLFiddle из фиктивных данных, используемых выше: http://sqlfiddle.com/#!2/e6d18/1