最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-03 12:31:12
文档

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

使用 Laravel Eloquent 的 hasMany 来开发无限极分类:在网上商城上,我们经常可以看到多级分类、子分类、甚至无限极分类。本文将向你展示如何优雅的通过 Laravel Eloquent 将其实现。我们会创建一个微型项目来展示儿童商店的分类,总共有 5 级,如下:数据库迁移简单的数据表结构:Schema::create(&
推荐度:
导读使用 Laravel Eloquent 的 hasMany 来开发无限极分类:在网上商城上,我们经常可以看到多级分类、子分类、甚至无限极分类。本文将向你展示如何优雅的通过 Laravel Eloquent 将其实现。我们会创建一个微型项目来展示儿童商店的分类,总共有 5 级,如下:数据库迁移简单的数据表结构:Schema::create(&
在网上商城上,我们经常可以看到多级分类、子分类、甚至无限极分类。本文将向你展示如何优雅的通过 Laravel Eloquent 将其实现。

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

微信截图_20200511102154.png

数据库迁移

简单的数据表结构:

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

数据表数据如下:

微信截图_20200511102136.png

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’),因此只要当前子类别中有类别,模板就会递归地加载子类别。

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

推荐教程:《PHP教程》《Laravel教程》

文档

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

使用 Laravel Eloquent 的 hasMany 来开发无限极分类:在网上商城上,我们经常可以看到多级分类、子分类、甚至无限极分类。本文将向你展示如何优雅的通过 Laravel Eloquent 将其实现。我们会创建一个微型项目来展示儿童商店的分类,总共有 5 级,如下:数据库迁移简单的数据表结构:Schema::create(&
推荐度:
标签: 使用 laravel Eloquent
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top