递归获取子类php,php – 递归地获取树的所有父母和子女

在Laravel中,通过Eloquent ORM实现递归查询MySQL表格,以生成树状视图。首先定义模型中的`children()`和`parent()`关系,然后在视图中使用递归方法展示数据。可以使用直接的多重`foreach`嵌套,或者实现一个递归函数来处理任意级别的子节点。
摘要由CSDN通过智能技术生成

我有一个MySQL表格

+--------------------+--------------------+--------------------+

| Id | parent_id | title |

+--------------------+--------------------+--------------------+

| 1 | 0 | Student Management |

|--------------------|--------------------|--------------------|

| 2 | 0 | Staff Management |

|--------------------|--------------------|--------------------|

| 3 | 1 | Add Student |

|--------------------|--------------------|--------------------|

| 4 | 1 | View Students |

|--------------------|--------------------|--------------------|

| 5 | 2 | Add Staff |

|--------------------|--------------------|--------------------|

| 6 | 2 | View Staff |

|--------------------|--------------------|--------------------|

| 7 | 4 | Delete |

|--------------------|--------------------|--------------------|

| 8 | 5 | Copy |

+--------------------+--------------------+--------------------+

我希望以递归方式在我的视图中得到上述.

期望的输出

+-------------------------------+------------------------------+

| Student Mangement | Staff Management |

| Add Student | Add Staff |

| View Student | Copy |

| Delete | View Staff |

+-------------------------------+------------------------------+

我希望将MySQL表格作为上面定义的结构

我的创建方法是

public function create()

{

$categories = Categories::where('parent_id', '=', 0)->get();

$permission = Categories::pluck('title','id')->all();

return view('create-role')->with(compact('categories'));

}

通过上述方法,我将父母视为

@foreach($categories as $category)

{{ $category->title }}

@endforeach

输出为

学生管理

员工管理

请帮助我如何递归地获得上述结构.

解决方法:

首先定义模型中的关系

public function children() {

return $this->hasMany(Category::class, 'parent_id', 'id');

}

public function parent() {

return $this->belongsTo(Category::class, 'parent_id', 'id');

}

然后在你看来,我不知道你有多少子级别.但有两种方法:

1-最简单的方法

如果你知道,你将永远不会超过3个级别,只需在你的视图中嵌套3个foreach

首先,你急切地询问

$categories = Category::with('children')->get(); //save you some queries

@foreach($categories as $category)

@if( $category->children )

@foreach($category->children as $level2)

@if($level2->children)

@foreach($level2->children as $level3)

@if($level3->children)

//another foreach

@endif

{{ $level3->title }}

@foreach

@endif

{{ $level2->title }}

@endforeach

@endif

{{ $category->title }}

@endforeach

2-实际的递归方式.

这是实验性的,未经过测试

定义递归关系

public function recursiveChildren() {

return $this->children()->with('recursiveChildren');

//It seems this is recursive

}

标签:php,mysql,recursion,laravel

来源: https://codeday.me/bug/20190522/1154395.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值