Laravel8.x无限级分类怎么递归渲染前端树形菜单

胖墨吖_9393

胖墨吖_9393

2026-10-28

621人浏览

原创

Laravel 8.x 实现无限级分类树形菜单需后端嵌套数据+前端递归渲染:模型设 nullable parent_id 并定义 children 关系,控制器用 with 预加载;Blade 中通过 @include 递归渲染 _node 模板,配合 CSS 缩进与可选 JS 交互。

laravel8.x无限级分类怎么递归渲染前端树形菜单

在 Laravel 8.x 中实现无限级分类的前端树形菜单,核心是「后端提供结构化嵌套数据 + 前端递归渲染」。不依赖第三方包也能高效完成,关键是数据组织方式和 Blade 模板的递归写法要匹配。

后端:用 Eloquent 预加载构建嵌套树

确保分类模型中定义好父子关系:

  • 迁移字段必须允许 null:`$table->foreignId('parent_id')->nullable()->constrained()->nullOnDelete();`(不能设 default(0) 或 unsigned 且非空)
  • 模型中声明关系:
    public function children()
    {
        return $this->hasMany(Category::class, 'parent_id');
    }
    <p>// 用于一次性加载整棵树(含所有后代)
    public function descendantsAndSelf()
    {
    return $this->children()->with('descendantsAndSelf');
    }</p>
  • 控制器中获取根节点并预加载全树:
    $categories = Category::whereNull('parent_id')
        ->with(['children' => fn($q) => $q->with('children')])
        ->get();

    注意:Laravel 8.x 的 `with()` 支持闭包嵌套,最多展开两层已够多数场景;若需真正无限深度,可改用递归集合处理(见下文补充)。

前端:Blade 中用 @include 实现递归模板

在 resources/views/categories/index.blade.php 中写主入口:


    @foreach($categories as $category) @include('categories._node', ['node' => $category]) @endforeach

再新建 resources/views/categories/_node.blade.php(关键递归文件):

前端开发
前端开发

ys-agent 前端(frontend/)功能迭代的工程规范守门 skill。当任何 agent 接到 ys-agent 前端相关任务时——新增页面、新增组件、加 API、加 Pinia store、改路由、写 mock、调整布局、修改样式、对接后端接口、迁移 demo 代码、做主题、加权限、写公共组件、做数据可视化、做表单、做弹窗、做表格、做搜索过滤、调 Element Plus 用法、做响应式、做性能优化,或仅仅是在 frontend/ 目录下编辑任何 .vue / .ts / .scss / .c

下载

  • {{ $node->name }}
    @if($node->children->isNotEmpty())
      @foreach($node->children as $child) @include('categories._node', ['node' => $child]) @endforeach
    @endif
  • 这样就完成了无 JS、零依赖的纯服务端递归渲染。样式可通过 CSS 控制缩进(如 padding-left: calc({{ $depth ?? 0 }} * 24px),需在 include 时传入 depth 参数)。

    补充:需要动态交互?加简单 JS 展开/收起

    如果希望点击箭头控制子菜单显隐,只需给每个

      加初始 `style="display:none"`,再用轻量 JS 绑定 toggle:

      • 为父节点 label 添加 data-id 和 toggle 按钮
      • JS 监听点击,切换对应 ul 的 display 状态
      • 无需 Vue/React,10 行原生 JS 就够用

      避坑提醒

      常见翻车点集中在后端数据构造环节:

      • 用 with('children') 却没限制层级 → 触发 N+1 查询或内存溢出
      • 数据库里 parent_id 类型为 unsignedBigInteger 但值为 0 → 根节点查不到(应为 null)
      • Blade 递归未设终止条件(如漏掉 @if($node->children->count()))→ 报错或空数组报错
      • 直接在模板里写 PHP 递归函数 → 不推荐,破坏视图职责,也难调试

      前端入门到VUE实战笔记:立即使用
      在学习笔记中,你将探索 前端 的入门与实战技巧!

      相关文章

      PHP速学视频免费教程(入门到精通)
      PHP速学视频免费教程(入门到精通)

      PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

      下载

      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

      相关专题

      更多
      python是前端还是后端
      python是前端还是后端

      Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

      2023.08.11

      2703

      5

      前端如何实现即时通讯
      前端如何实现即时通讯

      实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

      2023.10.09

      5863

      6

      前端和后端的区别
      前端和后端的区别

      前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

      2024.03.19

      6830

      13

      php和前端的关联介绍
      php和前端的关联介绍

      php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

      2024.03.22

      6558

      10

      前端外包工作内容有哪些
      前端外包工作内容有哪些

      前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

      2024.05.22

      943

      5

      php文件怎么打开
      php文件怎么打开

      打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

      2023.09.01

      11664

      6

      php怎么取出数组的前几个元素
      php怎么取出数组的前几个元素

      取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

      2023.10.11

      6721

      5

      php反序列化失败怎么办
      php反序列化失败怎么办

      php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

      2023.10.11

      2175

      5

      php怎么连接mssql数据库
      php怎么连接mssql数据库

      连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

      2023.10.23

      4268

      4

      热门下载

      更多
      网站特效
      /
      网站源码
      /
      网站素材
      /
      前端模板

      精品课程

      更多
      相关推荐
      /
      热门推荐
      /
      最新课程
      如何安装 Composer
      如何安装 Composer

      共1课时 | 213人学习

      Composer手册
      Composer手册

      共0课时 | 0人学习