如何使用Laravel Eloquent来开发无限极分类

 更新时间:2021年05月31日 09:43:39   作者:八重樱  
在网上商城上,我们经常可以看到多级分类、子分类、甚至无限极分类。本文将向你展示如何优雅的通过 Laravel Eloquent 将其实现。

概述

我们会创建一个微型项目来展示儿童商店的分类,总共有 5 级,如下:

数据库迁移

简单的数据表结构:

Schema::create('categories', function (Blueprint $table) {
 $table->bigIncrements('id');
 $table->string('name');
 $table->unsignedBigInteger('category_id')->nullable();
 $table->foreign('category_id')->references('id')->on('categories');
 $table->timestamps();
});

只有一个 name 字段, 关联到其自身。所以,大部分父级分类 category_id = NULL,每一个子分类都有一个 parent_id

数据表数据如下:

Eloquent 模型和关联关系

首先,在 app/Category.php 创建一个简单的 hasMany() 方法, 分类可能拥有其自分类:

class Category extends Model
{
 public function categories()
 {
 return $this->hasMany(Category::class);
 }
}

好戏开场 本文最妙 “计策”。你知道可以向这样描述 递归 关系吗?如下:

public function childrenCategories()
{
 return $this->hasMany(Category::class)->with('categories');
}

因此,如果调用 Category::with(‘categories'),将得到下级 “子分类”,但是通过 Category::with(‘childrenCategories') 将能帮你实现无限极。

路由和控制器方法

现在,让我们尝试显示所有类别和子类别,如上例所示。

在 routes/web.php,我们添加以下内容:

Route::get('categories', 'CategoryController@index');

app/Http/CategoryController.php 如下所示:

public function index()
{
 $categories = Category::whereNull('category_id')
 ->with('childrenCategories')
 ->get();
 return view('categories', compact('categories'));
}

我们仅加载父类别,将子类别作为关系。简单吧?

视图和递归子视图

最后,渲染到页面。 在 resources/views/categories.blade.php 文件:

<ul>
 @foreach ($categories as $category)
 <li>{{ $category->name }}</li>
 <ul>
 @foreach ($category->childrenCategories as $childCategory)
 @include('child_category', ['child_category' => $childCategory])
 @endforeach
 </ul>
 @endforeach
</ul>

我们先遍历了最顶级的父类别,然后遍历出父类的子类别,然后使用 @include 加载子类别的子类别......

最好的部分是 resources/views/admin/child_category.blade.php 将使用递归加载自身。看代码:

<li>{{ $child_category->name }}</li>
@if ($child_category->categories)
 <ul>
 @foreach ($child_category->categories as $childCategory)
 @include('child_category', ['child_category' => $childCategory])
 @endforeach
 </ul>
@endif

在 child_category.blade.php 内部,我们包含了 @include(‘child_category'),因此只要当前子类别中有类别,模板就会递归地加载子类别。

就是这样!我们拥有无限级别的子类别 - 无论是在数据库还是关联关系或是视图中

以上就是如何使用Laravel Eloquent来开发无限极分类的详细内容,更多关于使用Laravel Eloquent来开发无限极分类的资料请关注脚本之家其它相关文章!

相关文章

  • php提高网站效率的技巧

    php提高网站效率的技巧

    随着国内PHP开发的兴起,代码优化成了老生常谈的话题了。作者本人时不时也会跑到CSDN坛论与人交流交流有交PHP开发和优化问题,这也是可以使自身快速提高的方法。
    2015-09-09
  • PHP合并两个或多个数组的方法

    PHP合并两个或多个数组的方法

    在本篇文章里我们给大家带来一篇关于PHP如何合并两个或多个数组的知识点内容,有需要的朋友们学习下。
    2019-01-01
  • PHP 文件类型判断代码

    PHP 文件类型判断代码

    这篇文章主要为大家介绍一下判断php文件类型的代码,需要的朋友可以参考一下
    2009-03-03
  • PHP使用栈解决约瑟夫环问题算法示例

    PHP使用栈解决约瑟夫环问题算法示例

    这篇文章主要介绍了PHP使用栈解决约瑟夫环问题算法,简单描述了约瑟夫环问题并给出了PHP使用栈解决约瑟夫环的相关算法实现技巧,需要的朋友可以参考下
    2017-08-08
  • 通过PHP设置BugFree获取邮箱通知

    通过PHP设置BugFree获取邮箱通知

    在本篇文章里小编给大家分享了关于通过PHP设置BugFree获取邮箱通知的相关知识点内容,需要的朋友们跟着学习下。
    2019-04-04
  • php格式输出文件var_export函数实例

    php格式输出文件var_export函数实例

    这篇文章主要介绍了php格式输出文件var_export函数,以实例形式讲述了格式输出函数var_export的特性与具体用法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • PHP基于swoole多进程操作示例

    PHP基于swoole多进程操作示例

    这篇文章主要介绍了PHP基于swoole多进程操作,结合实例形式分析了php使用swoole多进程实现多个任务同时执行以及大任务划分成多个小任务相关操作技巧,需要的朋友可以参考下
    2019-08-08
  • php的POSIX 函数以及进程测试的深入分析

    php的POSIX 函数以及进程测试的深入分析

    本篇文章是对php的POSIX函数以及进程测试进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php mysql实现mysql_select_db选择数据库

    php mysql实现mysql_select_db选择数据库

    在PHP中,与MySQL服务器建立连接后,需要确定所要连接的数据库,此时我们可以使用mysql_select_db函数,该函数用于选择需要操作的数据库,需要的朋友可以参考下
    2016-12-12
  • PHP实现深度优先搜索算法(DFS,Depth First Search)详解

    PHP实现深度优先搜索算法(DFS,Depth First Search)详解

    这篇文章主要介绍了PHP实现深度优先搜索算法(DFS,Depth First Search),简单分析了深度优先搜索算法的原理并结合具体实例给出了php实现深度优先搜索的具体步骤与相关操作技巧,需要的朋友可以参考下
    2017-09-09

最新评论