La colonne tutorielle d'introduction suivante développée par Laravel vous présentera la méthode d'utilisation de hasMany de Laravel Eloquent pour développer la classification Infinitus. J'espère qu'elle sera utile aux amis dans le besoin ! Dans les centres commerciaux en ligne, nous pouvons souvent voir des catégories, des sous-catégories et même des catégories Infinitus à plusieurs niveaux. Cet article vous montrera comment l'implémenter avec élégance avec Laravel Eloquent.
Nous allons créer un micro projet pour afficher la classification des magasins pour enfants, avec un total de 5 niveaux, comme suit :
Migration de la base de donnéesStructure de table de données simple :
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(); });
n'a qu'un seul champ de nom, lié à lui-même. Par conséquent, la plupart des catégories parentescategory_id = NULL, et chaque sous-catégorie a un parent_id
Les données du tableau de données sont les suivantes :
Modèle éloquent et relations associéesTout d'abord, créez une méthode simple hasMany() dans app/Category.php Les catégories peuvent avoir leurs propres auto-catégories :
class Category extends Model { public function categories() { return $this->hasMany(Category::class); } }
La meilleure chose à propos de cet article est. le début du "plan" du spectacle. Saviez-vous que vous pouvez décrire une relation récursive comme celle-ci ? Comme suit :
public function childrenCategories() { return $this->hasMany(Category::class)->with('categories'); }
Donc, si vous appelez Category::with('categories'), vous obtiendrez les "sous-catégories" de niveau inférieur, mais Category::with('childrenCategories') vous aidera à atteindre infini.
Routes et méthodes de contrôleurEssayons maintenant d'afficher toutes les catégories et sous-catégories comme indiqué dans l'exemple ci-dessus.
Dans routes/web.php, nous ajoutons ce qui suit :
Route::get('categories', 'CategoryController@index');
app/Http/CategoryController.php comme suit :
public function index() { $categories = Category::whereNull('category_id') ->with('childrenCategories') ->get(); return view('categories', compact('categories')); }
Nous chargeons uniquement la catégorie parent, qui les sous-catégories serviront de relations. Simple, non ?
Vues et sous-vues récursivesEnfin, effectuez le rendu sur la page. Dans le fichier 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>
nous parcourons d'abord la catégorie parent de niveau supérieur, puis parcourons les sous-catégories de la catégorie parent, puis utilisons @include pour charger les sous-catégories de la sous-catégorie.. ....
La meilleure partie est que resources/views/admin/child_category.blade.php se chargera de manière récursive. Regardez le code :
<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
Dans child_category.blade.php, nous incluons @include('child_category') afin que le modèle charge récursivement les sous-catégories tant qu'il y a des catégories dans la sous-catégorie actuelle.
Ça y est ! Nous avons des niveaux illimités de sous-catégories - que ce soit dans les bases de données, les relations ou les vues
Pour plus d'articles techniques sur le framework Laravel, veuillez visiter les didacticiels
laravel !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!