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作的文本留言本的例子(四)
Oct 09 PHP
windows xp下安装pear
Dec 02 PHP
php学习之 循环结构实现代码
Jun 09 PHP
php开发过程中关于继承的使用方法分享
Jun 17 PHP
php curl获取网页内容(IPV6下超时)的解决办法
Jul 16 PHP
php 魔术方法详解
Nov 11 PHP
PHP实现批量上传单个文件
Dec 29 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
Oct 14 PHP
PHP对象实例化单例方法
Jan 19 PHP
PHP批量修改文件名称的方法分析
Feb 27 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
May 29 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
些很实用且必用的小脚本代码
2006/06/26 Javascript
修改发贴的编辑功能
2007/03/07 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
jquery 中ajax执行的优先级
2015/06/22 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
纯javascript代码实现计算器功能(三种方法)
2015/09/07 Javascript
js+html5操作sqlite数据库的方法
2016/02/02 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
EasyUI Combobox设置默认值 获取text的方法
2016/11/28 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
[03:24][TI9纪实] Dota奶爸
2019/08/22 DOTA
python实现简单购物商城
2016/05/21 Python
Python IDLE入门简介
2017/12/08 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
详解Python with/as使用说明
2018/12/13 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
python和go语言的区别是什么
2020/07/20 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
2014年应届大学生自我评价
2014/01/09 职场文书
给实习单位的感谢信
2014/02/01 职场文书
婚前协议书
2014/04/15 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书