laravel 多级父子表查询 整合成树
时间: 2023-09-01 08:06:26 浏览: 55
您可以使用 Laravel 的 Eloquent ORM 和递归方法来实现多级父子表查询整合成树的功能。
首先,您需要定义您的模型,并且在模型中定义表的关系。假设您的表名为 `categories`,那么您的模型代码可能如下所示:
```php
class Category extends Model
{
public function parent()
{
return $this->belongsTo(Category::class, 'parent_id');
}
public function children()
{
return $this->hasMany(Category::class, 'parent_id');
}
}
```
在上面的代码中,我们定义了 `parent()` 方法和 `children()` 方法来表示当前分类的父分类和子分类,这里使用了 Laravel 的 Eloquent ORM 中的关系映射方法。
接下来,您可以编写一个递归方法来将您的分类表数据整合成树形结构。代码如下:
```php
function buildTree($categories, $parentId = null) {
$branch = [];
foreach ($categories as $category) {
if ($category->parent_id == $parentId) {
$children = buildTree($categories, $category->id);
if ($children) {
$category->children = $children;
}
$branch[] = $category;
}
}
return $branch;
}
```
在上面的代码中,我们使用了递归的方式,从顶级分类开始,递归地查询当前分类的子分类,并将它们整合成树形结构。
最后,您可以在控制器中调用这个方法,并将查询到的分类数据传递给它,代码如下:
```php
use App\Models\Category;
class CategoryController extends Controller
{
public function index()
{
$categories = Category::all();
$tree = buildTree($categories);
return view('categories.index', ['categories' => $tree]);
}
}
```
在上面的代码中,我们首先查询了所有的分类数据,然后调用 `buildTree()` 方法将分类数据整合成树形结构,并将整合后的数据传递给视图渲染。
相关推荐
![md](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)