X 4*_* IR 7 php nested-lists laravel
如何在Laravel中创建嵌套的类别列表?
我想创建以下示例:
我的表的字段是:
id | name | parent_id
Run Code Online (Sandbox Code Playgroud)
如果我必须在深度上添加另一列到我的表中,请告诉我.
我正在使用以下代码,但我认为它不是创建嵌套列表类别的最佳解决方案,我不能将此函数传递给我的视图:
function rec($id)
{
$model = Category::find($id);
foreach ($model->children as $chield) rec($chield->id);
return $model->all();
}
function main () {
$models = Category::whereNull('parent_id')->get();
foreach ($models as $parent) return rec($parent->id);
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*ris 14
你可以做一个自我指涉的模型:
class Category extends Model {
public function parent()
{
return $this->belongsTo('Category', 'parent_id');
}
public function children()
{
return $this->hasMany('Category', 'parent_id');
}
}
Run Code Online (Sandbox Code Playgroud)
并建立递归关系:
// recursive, loads all descendants
public function childrenRecursive()
{
return $this->children()->with('childrenRecursive');
}
Run Code Online (Sandbox Code Playgroud)
并让父母带着他们所有的孩子:
$categories = Category::with('childrenRecursive')->whereNull('parent')->get();
Run Code Online (Sandbox Code Playgroud)
最后,您需要遍历子项,直到子项为空.如果你不小心,肯定会遇到一些性能问题.如果这是一个相当小的数据集,您计划保持这种方式,那么它应该不是问题.如果这将成为一个不断增长的列表,那么有一个root_parent_id或者什么来查询和手动组装树可能是有意义的.
| 归档时间: |
|
| 查看次数: |
4402 次 |
| 最近记录: |