我有一个类别表。每个类别都可以有一个可选的父级(如果没有父级,则默认为 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 个 foreach 循环,您就不能真正对子数据执行任何操作。
我在这里做错了什么?当然这不应该这么难/执行不力吗?我想要做的就是获得一个简单的 html 列表,其中包含树结构中的项目。
我已经汇总了上面使用的虚拟数据的快速 SQLFiddle 示例:http ://sqlfiddle.com/#!2/e6d18/1