使用 Laravel Eloquent 的 hasMany 来开发无限极分类
下面由Laravel开发入门教程栏目给大家介绍使用 Laravel Eloquent 的 hasMany 来开发无限极分类的方法,希望对需要的朋友有所帮助!
在网上商城上,我们经常可以看到多级分类、子分类、甚至无限极分类。本文将向你展示如何优雅的通过 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框架技术文章,请访问laravel教程!
以上是使用 Laravel Eloquent 的 hasMany 来开发无限极分类的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Laravel邮件发送失败时的退信代码获取方法在使用Laravel开发应用时,经常会遇到需要发送验证码的情况。而在实�...

Laravel计划任务运行无响应排查在使用Laravel的计划任务调度时,不少开发者会遇到这样的问题:schedule:run...

在dcatadmin(laravel-admin)中如何实现自定义点击添加数据的表格功能在使用dcat...

Laravel框架中Redis连接的共享与select方法的影响在使用Laravel框架和Redis时,开发者可能会遇到一个问题:通过配置...

在Laravel多租户扩展包stancl/tenancy中自定义租户数据库连接使用Laravel多租户扩展包stancl/tenancy构建多租户应用时,...

LaravelEloquent模型检索:轻松获取数据库数据EloquentORM提供了简洁易懂的方式来操作数据库。本文将详细介绍各种Eloquent模型检索技巧,助您高效地从数据库中获取数据。1.获取所有记录使用all()方法可以获取数据库表中的所有记录:useApp\Models\Post;$posts=Post::all();这将返回一个集合(Collection)。您可以使用foreach循环或其他集合方法访问数据:foreach($postsas$post){echo$post->

Laravel数据库迁移过程中出现类重复定义问题在使用Laravel框架进行数据库迁移时,开发者可能会遇到“类已使用�...
