Heim  >  Artikel  >  PHP-Framework  >  Verwenden von hasMany von Laravel Eloquent zur Entwicklung der Infinitus-Klassifizierung

Verwenden von hasMany von Laravel Eloquent zur Entwicklung der Infinitus-Klassifizierung

Guanhui
Guanhuinach vorne
2020-05-11 10:20:442956Durchsuche

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:

Verwenden von hasMany von Laravel Eloquent zur Entwicklung der Infinitus-Klassifizierung

Datenbankmigration

Einfache 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:

Verwenden von hasMany von Laravel Eloquent zur Entwicklung der Infinitus-Klassifizierung

Eloquentes Modell und Zugehörige Beziehungen

Erstellen 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-Methoden

Versuchen 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 Unteransichten

Zum 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(&#39;child_category&#39;, [&#39;child_category&#39; => $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(&#39;child_category&#39;, [&#39;child_category&#39; => $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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen