Heim > Artikel > PHP-Framework > Verwenden von hasMany von Laravel Eloquent zur Entwicklung der Infinitus-Klassifizierung
Die folgende Einführungs-Tutorial-Kolumne, die von Laravel entwickelt wurde, stellt Ihnen die Methode zur Verwendung von Laravel Eloquents hasMany zur Entwicklung der Infinitus-Klassifizierung vor. Ich hoffe, dass sie Freunden in Not hilfreich sein wird! In Online-Einkaufszentren können wir oft mehrstufige Kategorien, Unterkategorien und sogar Infinitus-Kategorien sehen. Dieser Artikel zeigt Ihnen, wie Sie es mit Laravel Eloquent elegant umsetzen.
Wir werden ein Mikroprojekt erstellen, um die Klassifizierung von Kindergeschäften mit insgesamt 5 Ebenen wie folgt anzuzeigen:
DatenbankmigrationEinfache Datentabellenstruktur:
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(); });
hat nur ein Namensfeld, das sich auf sich selbst bezieht. Daher ist die Kategorie_ID der meisten übergeordneten Kategorien NULL und jede Unterkategorie hat eine übergeordnete_ID
Die Datentabellendaten lauten wie folgt:
Eloquentes Modell und Zugehörige BeziehungenErstellen Sie zunächst eine einfache hasMany()-Methode in app/Category.php. Kategorien können ihre eigenen Selbstkategorien haben:
class Category extends Model { public function categories() { return $this->hasMany(Category::class); } }
Das Beste an diesem Artikel ist der Beginn der Show „Plan“. Wussten Sie, dass Sie eine rekursive Beziehung wie diese beschreiben können? Wie folgt:
public function childrenCategories() { return $this->hasMany(Category::class)->with('categories'); }
Wenn Sie also Category::with('categories') aufrufen, erhalten Sie die „Unterkategorien“ der unteren Ebene, aber die Verwendung von Category::with('childrenCategories') wird Ihnen helfen Unendlichkeit erreichen.
Routen und Controller-MethodenVersuchen wir nun, alle Kategorien und Unterkategorien anzuzeigen, wie im obigen Beispiel gezeigt.
In Routen/web.php fügen wir Folgendes hinzu:
Route::get('categories', 'CategoryController@index');
app/Http/CategoryController.php wie folgt:
public function index() { $categories = Category::whereNull('category_id') ->with('childrenCategories') ->get(); return view('categories', compact('categories')); }
Wir laden nur die übergeordnete Kategorie, die Unterkategorien werden als Beziehungen bezeichnet. Einfach, oder?
Ansichten und rekursive UnteransichtenZum Schluss rendern Sie auf der Seite. In der Datei 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>
durchlaufen wir zuerst die übergeordnete Kategorie der obersten Ebene, dann die Unterkategorien der übergeordneten Kategorie und verwenden dann @include, um die Unterkategorien von zu laden die Unterkategorie.. ....
Das Beste daran ist, dass resources/views/admin/child_category.blade.php sich selbst rekursiv lädt. Schauen Sie sich den Code an:
<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
In child_category.blade.php fügen wir @include(‘child_category’) ein, sodass die Vorlage Unterkategorien rekursiv lädt, solange es Kategorien in der aktuellen Unterkategorie gibt.
Das ist es! Wir verfügen über unbegrenzte Ebenen an Unterkategorien – ob in Datenbanken, Beziehungen oder Ansichten
Weitere technische Artikel zum Laravel-Framework finden Sie in den
Laravel-Tutorials!
Das obige ist der detaillierte Inhalt vonVerwenden von hasMany von Laravel Eloquent zur Entwicklung der Infinitus-Klassifizierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!