使用 Laravel Eloquent 的 hasMany 来开发无限极分类

使用 Laravel Eloquent 的 hasMany 来开发无限极分类,第1张

概述在网上商城上,我们经常可以看到多级分类、子分类、甚至无限极分类。本文将向你展示如何优雅的通过 Laravel Eloquent 将其实现。 我们会创建一个微型项目来展示儿童商店的分类,总共有 5 级,

在网上商城上,我们经常可以看到多级分类、子分类、甚至无限极分类。本文将向你展示如何优雅的通过 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’),因此只要当前子类别中有类别,模板就会递归地加载子类别。

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

更多学习内容请访问:

腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)

 

总结

以上是内存溢出为你收集整理的使用 Laravel Eloquent 的 hasMany 来开发无限极分类全部内容,希望文章能够帮你解决使用 Laravel Eloquent 的 hasMany 来开发无限极分类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1240586.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存