如何使用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来开发无限极分类的资料请关注脚本之家其它相关文章!
您可能感兴趣的文章:- Qt简介以及如何配置Qt使用VS2010进行开发 分类: QT学习实践 2015-05-05 16:02 34人阅读 评论(0) 收藏
- 使用laravel的Eloquent模型如何获取数据库的指定列
- 使用laravel开发网站时,如何实现前端导航栏共享数据二种简单的方法
- 库的使用与生成+库的分类+如何制作库+如何使用库+动态编译与静态编译+如何配置针对arm的开发工具链
- 使用mmit进行移动开发,如何在一行同时显示图片和文字.
- 如何使用.net来部署使用了水晶报表开发出来的exe程序
- 如何使用VC开发wxWidgets程序?
- 【转】如何使用ajax开发web应用程序(一)
- 如何使用ajax开发web应用程序(3)
- 如何在VC中使用ADO开发数据库应用程序
- 教您如何使用EclipseME开发J2ME程序
- 如何使用ajax开发web应用程序(3)
- [翻译]如何使用ajax开发web应用程序[1]
- 如何使用DOTMSN开发简单的MSN机器人示例(附示例源码)
- 如何在项目开发过程中使用Struts-menu
- WebService开发(一) 如何使用Soap头
- 如何在Sql开发工具中在sql中使用变量
- 如何使用Abator利器来开发ibatis应用实例!
- 在Eclipse3.1中如何使用Lomboz3.1开发JSP
- [转载]在Eclipse3.1中如何使用Lomboz3.1开发struts