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 获取可变函数参数的函数
Aug 26 PHP
求PHP数组最大值,最小值的代码
Oct 31 PHP
php eval函数用法 PHP中eval()函数小技巧
Oct 31 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
Jul 05 PHP
关于PHP的curl开启问题探讨
Apr 08 PHP
Yii调试SQL的常用方法
Jul 09 PHP
PHP实现加密的几种方式介绍
Feb 22 PHP
CodeIgniter使用smtp服务发送html邮件的方法
Jun 10 PHP
php求数组全排列,元素所有组合的方法
May 05 PHP
php封装的page分页类完整实例
Oct 18 PHP
Laravel 5.4.36中session没有保存成功问题的解决
Feb 19 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
Oct 23 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 获取远程网页内容的函数
2009/09/08 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
linux中cd命令使用详解
2015/01/08 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
2015/12/18 PHP
Yii2如何批量添加数据
2016/05/17 PHP
鼠标移入移出事件改变图片的分辨率的两种方法
2013/12/17 Javascript
jQuery中parentsUntil()方法用法实例
2015/01/07 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
javascript执行环境及作用域详解
2016/05/05 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
无循环 JavaScript(map、reduce、filter和find)
2017/04/08 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
10行原生JS实现文字无缝滚动(超简单)
2018/01/02 Javascript
vue 实现剪裁图片并上传服务器功能
2018/03/01 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
基于JS实现带动画效果的流程进度条
2018/06/01 Javascript
JavaScript实现动态留言板
2020/03/16 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
深入理解python try异常处理机制
2016/06/01 Python
Python 基础之字符串string详解及实例
2017/04/01 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
Ralph Lauren英国官方网站:Ralph Lauren UK
2018/04/03 全球购物
竞选劳动委员演讲稿
2014/04/28 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
护士2015年终工作总结
2015/04/29 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
招商银行工作证明
2015/06/17 职场文书
使用nginx配置访问wgcloud的方法
2021/06/26 Servers
Python+Pillow+Pytesseract实现验证码识别
2022/05/11 Python