2023-01-13 276
我们会创建一个微型项目来展示儿童商店的分类,总共有 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
数据表数据如下:
首先,在 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来开发无限极分类,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/25352.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态