返回
热门搜索

如何使用Laravel Eloquent来开发无限极分类

IT博客 操作系统 linux 点击量 346

基本信息 收藏 - 举报 - 海报

详细介绍

目录
概述数据库迁移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 文件:

    @foreach ($categories as $category)
  • {{ $category->name }}
    • @foreach ($category->childrenCategories as $childCategory) @include("child_category", ["child_category" => $childCategory]) @endforeach
    @endforeach

我们先遍历了最顶级的父类别,然后遍历出父类的子类别,然后使用 @include 加载子类别的子类别......

最好的部分是 resources/views/admin/child_category.blade.php 将使用递归加载自身。看代码:

  • {{ $child_category->name }}
  • @if ($child_category->categories)
      @foreach ($child_category->categories as $childCategory) @include("child_category", ["child_category" => $childCategory]) @endforeach
    @endif

    在 child_category.blade.php 内部,我们包含了 @include(‘child_category"),因此只要当前子类别中有类别,模板就会递归地加载子类别。

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

    以上就是如何使用Laravel Eloquent来开发无限极分类的详细内容,更多关于使用Laravel Eloquent来开发无限极分类的资料请关注IT博客社区其它相关文章!

    没有更多内容。

    用户评价(0)

    好评度100%
    • 还没有人评论此条信息!
    + 加载更多

    联系方式

    提示:联系我时,请说明在巅云php学苑看到的,谢谢!
    • 联系人:
    • 地  区:
    • 电  话: 共发布信息(2004)条 所在地:未填写
    看了又看
    加载中
    首页 首页 收藏 收藏

    电话联系