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中获得视频时间总长度的另一种方法
Sep 15 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
Dec 30 PHP
解析php安全性问题中的:Null 字符问题
Jun 21 PHP
ThinkPHP快速入门实例教程之数据分页
Jul 01 PHP
访问编码后的中文URL返回404错误的解决方法
Aug 20 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
Sep 10 PHP
php遍历目录方法小结
Mar 10 PHP
thinkPHP自定义类实现方法详解
Nov 30 PHP
PHP面相对象中的重载与重写
Feb 13 PHP
关于PHP定时发送服务的解决办法
Apr 23 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 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学习之数组值的操作
2011/04/17 PHP
PHP 获取远程文件大小的3种解决方法
2013/07/11 PHP
php文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
从零开始学YII2框架(一)通过Composer安装Yii2框架
2014/08/20 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
js用图作提交按钮或超连接
2008/03/26 Javascript
Javascript 中的 &amp;&amp; 和 || 使用小结
2010/04/25 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
浅谈jQuery中height与width
2015/07/06 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
jquery中each循环的简单回滚操作
2017/05/05 jQuery
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
VUE element-ui 写个复用Table组件的示例代码
2017/11/18 Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
2018/10/29 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
pygame播放音乐的方法
2015/05/19 Python
python中requests小技巧
2017/05/10 Python
Python之自动获取公网IP的实例讲解
2017/10/01 Python
python3.x实现发送邮件功能
2018/05/22 Python
Python爬取豆瓣视频信息代码实例
2019/11/16 Python
jupyter notebook的安装与使用详解
2020/05/18 Python
opencv 图像轮廓的实现示例
2020/07/08 Python
python实现数字炸弹游戏程序
2020/07/17 Python
python list的index()和find()的实现
2020/11/16 Python
电子商务专业实习生自我鉴定
2013/09/24 职场文书
求职自荐信范文格式
2013/11/29 职场文书
协议书的格式
2014/04/23 职场文书
乡镇保密工作责任书
2014/07/28 职场文书
课外访万家心得体会
2014/09/03 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
基石观后感
2015/06/12 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python