webfactorybulgaria / nestablecollection
一个 Laravel 扩展包,用于扩展 Collection 以处理遵循邻接表模型的无限嵌套项。
v4.0.0
2015-12-11 12:47 UTC
Requires
- illuminate/database: ~4.2.0|~5.0
- illuminate/support: ~4.2.0|~5.0
This package is not auto-updated.
Last update: 2024-09-14 18:26:08 UTC
README
一个 Laravel/Lumen 扩展包,用于扩展 Collection 以处理遵循邻接表模型的无限嵌套项。
安装
运行 composer require typicms/nestablecollection
用法
模型必须有一个 parent_id 属性
protected $fillable = array( 'parent_id', // … }
并且必须使用以下特性
use TypiCMS\NestableTrait;
现在每次获取该模型的集合时,它将是一个 TypiCMS\NestableCollection 实例,而不是 Illuminate\Database\Eloquent\Collection。
如果您想要一个模型树,只需对按 parent_id 升序排序的集合调用 nest 方法
Model::orderBy('parent_id')->get()->nest();
当然,您可能还需要一个位置列。因此,您必须首先按 parent_id 升序排序,然后按位置升序排序。
缩进和扁平列表
listsFlattened() 方法生成一个以 id 作为键,以标题作为值的树作为扁平列表,非常适合 select/option,例如
[
'22' => 'Item 1 Title',
'10' => ' Child 1 Title',
'17' => ' Child 2 Title',
'14' => 'Item 2 Title',
]
要使用它,首先调用 nest() 方法,然后调用 listsFlattened() 方法
Model::orderBy('parent_id')->get()->nest()->listsFlattened();
默认情况下,它将查找一个 title 列。您可以将自定义列名作为第一个参数发送
Model::orderBy('parent_id')->get()->nest()->listsFlattened('name');