Home  >  Article  >  PHP Framework  >  Using Laravel Eloquent's hasMany to develop Infinitus classification

Using Laravel Eloquent's hasMany to develop Infinitus classification

Guanhui
Guanhuiforward
2020-05-11 10:20:442954browse

The following is developed by LaravelThe introductory tutorial column will introduce you to the method of using Laravel Eloquent's hasMany to develop Infinitus classification. I hope it will be helpful to friends in need!

In online shopping malls, we can often see multi-level classifications, sub-categories, and even Infinitus classifications. This article will show you how to elegantly implement it with Laravel Eloquent.

We will create a micro project to display the classification of children's stores, with a total of 5 levels, as follows:

Using Laravel Eloquents hasMany to develop Infinitus classification

Database migration

Simple data table structure:

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();
});

There is only one name field, related to itself. Therefore, most parent categories category_id = NULL, and each subcategory has a parent_id

The data table data is as follows:

Using Laravel Eloquents hasMany to develop Infinitus classification

##Eloquent model And the relationship

First, create a simple hasMany() method in app/Category.php. The category may have its own self-categorization:

class Category extends Model
{
    public function categories()
    {
        return $this->hasMany(Category::class);
    }
}

The show starts with the best part of this article" plan". Did you know that you can describe a recursive relationship like this? As follows:

public function childrenCategories()
{
    return $this->hasMany(Category::class)->with('categories');
}

Therefore, if you call Category::with(‘categories’), you will get the lower-level “subcategories”, but Category::with(‘childrenCategories’) will help you achieve infinity.

Routes and Controller Methods

Now, let us try to display all categories and subcategories as shown in the above example.

In routes/web.php, we add the following:

Route::get('categories', 'CategoryController@index');

app/Http/CategoryController.php as shown below:

public function index()
{
    $categories = Category::whereNull('category_id')
        ->with('childrenCategories')
        ->get();
    return view('categories', compact('categories'));
}

We only load the parent category and add Subcategories as relationships. Simple right?

Views and recursive subviews

Finally, render to the page. In the resources/views/categories.blade.php file:

<ul>
    @foreach ($categories as $category)
        <li>{{ $category->name }}</li>
        <ul>
        @foreach ($category->childrenCategories as $childCategory)
            @include(&#39;child_category&#39;, [&#39;child_category&#39; => $childCategory])
        @endforeach
        </ul>
    @endforeach
</ul>

We first traverse the top-level parent category, then traverse out the subcategories of the parent class, and then use @include to load the subcategories of the subcategory.. ....

The best part is that resources/views/admin/child_category.blade.php will load itself recursively. Look at the code:

<li>{{ $child_category->name }}</li>
@if ($child_category->categories)
    <ul>
        @foreach ($child_category->categories as $childCategory)
            @include(&#39;child_category&#39;, [&#39;child_category&#39; => $childCategory])
        @endforeach
    </ul>
@endif

Inside child_category.blade.php, we include @include(‘child_category’), so the template will recursively load subcategories as long as there are categories in the current subcategory.

That's it! We have unlimited levels of subcategories - whether in databases or relationships or views

For more laravel framework technical articles, please visit

laraveltutorials!

The above is the detailed content of Using Laravel Eloquent's hasMany to develop Infinitus classification. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:learnku.com. If there is any infringement, please contact admin@php.cn delete