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 strstr查找字符串中是否包含某些字符的查找函数
Jun 03 PHP
php.ini中date.timezone设置分析
Jul 29 PHP
php实现的一个很好用HTML解析器类可用于采集数据
Sep 23 PHP
php中session使用示例
Mar 29 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
Jun 19 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
利用PHP将部分内容用星号替换
Apr 21 PHP
ThinkPHP的常用配置选项汇总
Mar 24 PHP
CodeIgniter生成静态页的方法
May 17 PHP
[原创]php简单隔行变色功能实现代码
Jul 09 PHP
php实现简单加入购物车功能
Mar 07 PHP
PHP 图片合成、仿微信群头像的方法示例
Oct 25 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强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
js删除所有的cookie的代码
2010/11/25 Javascript
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
jquery实现左右轮播图效果
2017/09/28 jQuery
JS 数组随机洗牌的实例代码
2018/09/12 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
微信小程序如何访问公众号文章
2019/07/08 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
原生js实现放大镜组件
2021/01/22 Javascript
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
Python多线程编程(五):死锁的形成
2015/04/05 Python
Python抓取框架 Scrapy的架构
2016/08/12 Python
Python基础练习之用户登录实现代码分享
2017/11/08 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
2019/08/18 Python
pytorch构建多模型实例
2020/01/15 Python
美国婴儿和儿童服装购物网站:PatPat
2020/10/01 全球购物
服装行业创业计划书范文
2014/02/05 职场文书
标准化管理实施方案
2014/02/25 职场文书
中考标语大全
2014/06/05 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
写给老师的感谢信
2015/01/20 职场文书
大明湖导游词
2015/02/03 职场文书
小学班主任工作随笔
2015/08/15 职场文书
python中的None与NULL用法说明
2021/05/25 Python
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电