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

Guanhui
풀어 주다: 2020-05-11 13:59:48
앞으로
2805명이 탐색했습니다.

下面由Laravel开发入门教程栏目给大家介绍使用 Laravel Eloquent 的 hasMany 来开发无限极分类的方法,希望对需要的朋友有所帮助!

在网上商城上,我们经常可以看到多级分类、子分类、甚至无限极分类。本文将向你展示如何优雅的通过 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 文件:

    @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框架技术文章,请访问laravel教程!

    위 내용은 使用 Laravel Eloquent 的 hasMany 来开发无限极分类의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    관련 라벨:
    원천:learnku.com
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    저자별 최신 기사
    최신 이슈
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!