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 相关文章推荐
ThinkPHP CURD方法之field方法详解
Jun 18 PHP
destoon实现资讯信息前面调用它所属分类的方法
Jul 15 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
Oct 23 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
Jan 22 PHP
PHP中使用socket方式GET、POST数据实例
Apr 02 PHP
PHP模拟post提交数据方法汇总
Feb 16 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
Feb 19 PHP
一波PHP中cURL库的常见用法代码示例
May 06 PHP
php metaphone()函数及php localeconv() 函数实例解析
May 15 PHP
php结合redis高并发下发帖、发微博的实现方法
Dec 15 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
Feb 15 PHP
PHP大文件分块上传功能实例详解
Jul 22 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中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
浅析iis7.5安装配置php环境
2015/05/10 PHP
JavaScript 捕获窗口关闭事件
2009/07/26 Javascript
Jquery之美中不足小结
2011/02/16 Javascript
jquery获得同源iframe内body下标签的值的方法
2014/09/25 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
JavaScript、jQuery与Ajax的关系
2016/01/24 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
实例讲解JavaScript截取字符串
2018/11/30 Javascript
Vue两种组件类型:递归组件和动态组件的用法
2020/08/06 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
[58:35]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
Python中的下划线详解
2015/06/24 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
Python实现登陆文件验证方法
2018/10/06 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
Python3.5面向对象程序设计之类的继承和多态详解
2019/04/24 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
在django中使用post方法时,需要增加csrftoken的例子
2020/03/13 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
css3 flex实现div内容水平垂直居中的几种方法
2020/03/27 HTML / CSS
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
自主招生教师推荐信
2014/05/10 职场文书
高中学校对照检查材料
2014/08/31 职场文书
小学生五年级大队长竞选发言稿
2014/09/12 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
win10拖拽文件时崩溃怎么解决?win10文件不能拖拽问题解决方法
2022/08/14 数码科技