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 相关文章推荐
一棵php的类树(支持无限分类)
Oct 09 PHP
用PHP读取flv文件的播放时间长度
Sep 03 PHP
php中实现记住密码自动登录的代码
Mar 02 PHP
支持中文的php加密解密类代码
Nov 27 PHP
PHP开发者常犯的10个MySQL错误更正剖析
Jan 30 PHP
php按百分比生成缩略图的代码分享
May 10 PHP
ThinkPHP 3.2 版本升级了哪些内容
Mar 05 PHP
php使用递归函数实现数字累加的方法
Mar 16 PHP
Yii实现自动加载类地图的方法
Apr 01 PHP
PHP反射实际应用示例
Apr 03 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 PHP
php经典趣味算法实例代码
Jan 21 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实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
2016/08/12 PHP
表单的一些基本用法与技巧
2006/07/15 Javascript
Javascript miscellanea -display data real time, using window.status
2007/01/09 Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
JS实现仿苹果底部任务栏菜单效果代码
2015/08/28 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
2017/08/03 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
JavaScript格式化json和xml的方法示例
2019/01/22 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
2020/09/04 Javascript
Python中pygal绘制雷达图代码分享
2017/12/07 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
英国行业制服供应商:Alexandra
2019/09/14 全球购物
Linux如何压缩可执行文件
2013/10/21 面试题
西北政法大学自主招生自荐信
2014/01/29 职场文书
慈善晚会策划方案
2014/05/14 职场文书
2016年父亲节寄语
2015/12/04 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
商业计划书范文
2019/04/24 职场文书
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技
MySQL 计算连续登录天数
2022/05/11 MySQL