laravel7学习之无限级分类的最新实现方法


Posted in PHP onSeptember 30, 2020

写在前面的话

无限级分类,基本在所有的网站都有涉及,所以是必须要掌握的知识点,在网上看很多资料文档,要么不细致,要么根本不对,要么达不到预想的目标,其实实现的思路和方法非常简单,今天我们一起来实现一下。

laravel7学习之无限级分类的最新实现方法

创建模型控制器数据迁移文件

这里直接使用artisan命令进行创建

# -a 其实就是all,创建包含模型,控制器(资源),数据迁移文件(工厂模型、seed)
php artisan make:model -a Category

运行这条命令,就可以创建好资源控制器。

laravel7学习之无限级分类的最新实现方法

修改数据迁移文件

首先修改数据迁移文件xxx_create_categories_table.

打开文件,修改里面的up方法,添加相应字段。

Schema::create('categories', function (Blueprint $table) {
   $table->id();
   $table->string('title', 100)->comment('分类名称');
   $table->string('name', 100)->comment('分类标识');
   $table->string('description', 255)->nullable()->comment('分类描述');
   $table->integer('pid')->default(0)->comment('分类id');
   $table->integer('level')->default(1)->comment('分类层级');
   $table->integer('sort')->default(0)->comment('排序');
   $table->integer('status')->default(1)->comment('状态:0-禁用,1-正常');
   $table->timestamps();
  });

laravel7学习之无限级分类的最新实现方法

执行迁移命令

php artisan migrate

嵌套模型实现读取

//App\Models\Category.php
 
public function categories()
 {
  return $this->hasMany(self::class, 'pid', 'id')->with('categories');
 }

控制器调用

//app\Http\controllers\CategooryController.php
# use模型
use App\Models\Category;
 
public function index()
 {
  $categories = Category::with('categories')->where('pid', 0)->get();
  return view('category.index', compact('categories'));
 }

添加路由

在 routes/web.php,我们添加以下内容:

Route::get('category', 'CategoryController@index');

blade模版渲染

这里使用递归渲染。

在 resources/views/categories.blade.php 文件:

<table class="table table-borderless table-data3">
  <thead>
   <tr>
    <th>编号</th>
    <th>分类名称</th>
    <th>分类标识</th>
    <th>分类描述</th>
    <th>创建时间</th>
    <th>状态</th>
    <th>操作</th>
   </tr>
  </thead>
  <tbody>
   @foreach ($categories as $category)
   <tr class="tr-shadow">
    <td>{{ $category->id }}</td>
    <td>{{ $category->title }}</td>
    <td>
     <span class="block-email">{{ $category->name }}</span>
    </td>
    <td class="desc">{{ $category->description }}</td>
    <td>{{ $category->created_at }}</td>
    <td>
     <span class="status--process">{{ $category->status }}</span>
    </td>
    <td></td>
   </tr>
   <tr class="spacer"></tr>
   @foreach ($category->categories as $childCategory)
   @include('category.child_category', ['child_category' => $childCategory])
   @endforeach
   @endforeach
  </tbody>
 </table>

递归部分加载自身模版child_category.blade.php

<tr class="tr-shadow">
 <td>{{ $child_category->id }}</td>
 <td>|{{ str_repeat('--',$child_category->level-1) }} {{ $child_category->title }}</td>
 <td>
  <span class="block-email">{{ $child_category->name }}</span>
 </td>
 <td class="desc">{{ $child_category->description }}</td>
 <td>{{ $child_category->created_at }}</td>
 <td>
  <span class="status--process">{{ $child_category->status }}</span>
 </td>
 <td></td>
</tr>
<tr class="spacer"></tr>
@if ($child_category->categories)
@foreach ($child_category->categories as $childCategory)
@include('category.child_category', ['child_category' => $childCategory])
@endforeach
@endif

最后看一下效果

laravel7学习之无限级分类的最新实现方法

总结

到此这篇关于laravel7学习之无限级分类最新实现方法的文章就介绍到这了,更多相关laravel7无限级分类实现内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
图形数字验证代码
Oct 09 PHP
?算你??的 PHP 程式大小
Dec 06 PHP
PHP文件读写操作之文件读取方法详解
Jan 13 PHP
浅析PHP微信支付通知的处理方式
May 25 PHP
PHP实现linux命令tail -f
Feb 22 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
Mar 18 PHP
php简单构造json多维数组的方法示例
Jun 08 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
Jun 20 PHP
Swoole4.4协程抢占式调度器详解
May 23 PHP
PHP架构及原理知识点详解
Dec 22 PHP
PHP7 错误处理机制修改
Mar 09 PHP
如何利用PHP实现上传图片功能详解
Sep 24 #PHP
JS中彻底删除JSON对象组成的数组中的元素
Sep 22 #PHP
phpstudy隐藏index.php的方法
Sep 21 #PHP
如何在Laravel之外使用illuminate组件详解
Sep 20 #PHP
PHP编程一定要改掉的5个不良习惯
Sep 18 #PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
Sep 17 #PHP
深入浅析安装PhpStorm并激活的步骤详解
Sep 17 #PHP
You might like
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
PHP技术开发微信公众平台
2015/07/22 PHP
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
jQuery Animation实现CSS3动画示例介绍
2013/08/14 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
小程序根据手机机型设置自定义底部导航距离
2019/06/04 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
Python内置函数dir详解
2015/04/14 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
python处理xml文件的方法小结
2017/05/02 Python
Django实现分页显示效果
2019/10/31 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
英国水族馆和池塘用品购物网站:Warehouse Aquatics
2019/08/29 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
竞选班干部演讲稿
2014/04/24 职场文书
论文评语大全
2014/04/29 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
社会实践活动总结
2015/02/05 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
2016年共产党员公开承诺书
2016/03/24 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js
python 如何将两个实数矩阵合并为一个复数矩阵
2021/05/19 Python
nginx安装以及配置的详细过程记录
2021/09/15 Servers
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android