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:
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:
##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); } }
public function childrenCategories() { return $this->hasMany(Category::class)->with('categories'); }
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');
public function index() { $categories = Category::whereNull('category_id') ->with('childrenCategories') ->get(); return view('categories', compact('categories')); }
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('child_category', ['child_category' => $childCategory]) @endforeach </ul> @endforeach </ul>
<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
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!