Laravel Eloquent の hasMany を使用して Infinitus 分類を開発する

Guanhui
リリース: 2020-05-11 13:59:48
転載
2864 人が閲覧しました

以下はLaravel が開発したものです入門チュートリアルコラムでは、Laravel Eloquent の hasMany を使って Infinitus 分類を開発する方法を紹介します。必要!

オンライン ショッピング モールでは、複数レベルの分類、サブカテゴリ、さらには Infinitus の分類がよく見られます。この記事では、Laravel Eloquent を使用してこれをエレガントに実装する方法を説明します。

次のように、子供向けストアの分類を合計 5 つのレベルで表示するマイクロ プロジェクトを作成します。

Laravel Eloquent の hasMany を使用して Infinitus 分類を開発する

データベースの移行

単純なデータ テーブル構造:

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(); });
ログイン後にコピー

それ自体に関連する名前フィールドは 1 つだけあります。したがって、ほとんどの親カテゴリ category_id = NULL となり、各サブカテゴリにはparent_id が設定されます。

データ テーブルのデータは次のとおりです。

Laravel Eloquent の hasMany を使用して Infinitus 分類を開発する

#Eloquent モデル関係

まず、app/Category.php に単純な hasMany() メソッドを作成します。カテゴリには独自の自己分類がある場合があります:

class Category extends Model { public function categories() { return $this->hasMany(Category::class); } }
ログイン後にコピー

ショーは最良の部分から始まりますこの記事の「計画」。このように再帰的な関係を説明できることをご存知ですか?次のように:

public function childrenCategories() { return $this->hasMany(Category::class)->with('categories'); }
ログイン後にコピー

したがって、Category::with('categories') を呼び出すと、下位レベルの「サブカテゴリ」が取得されますが、Category::with('childrenCategories') は、これを達成するのに役立ちます。無限大。

ルートとコントローラー メソッド

次に、上の例に示すように、すべてのカテゴリとサブカテゴリを表示してみます。

routes/web.php に、以下を追加します:

Route::get('categories', 'CategoryController@index');
ログイン後にコピー

app/Http/CategoryController.php 以下に示すように:

public function index() { $categories = Category::whereNull('category_id') ->with('childrenCategories') ->get(); return view('categories', compact('categories')); }
ログイン後にコピー

親カテゴリとサブカテゴリを関係として追加します。シンプルですよね?

ビューと再帰サブビュー

最後に、ページをレンダリングします。 resource/views/categories.blade.php ファイル内:

    @foreach ($categories as $category)
  • {{ $category->name }}
    • @foreach ($category->childrenCategories as $childCategory) @include('child_category', ['child_category' => $childCategory]) @endforeach
    @endforeach
ログイン後にコピー

最初に最上位の親カテゴリを走査し、次に親クラスのサブカテゴリを走査し、次に @include を使用してサブカテゴリをロードします。サブカテゴリ.... ....

最も優れた点は、resources/views/admin/child_category.blade.php 自体が再帰的に読み込まれることです。コードを見てください:

  • {{ $child_category->name }}
  • @if ($child_category->categories)
      @foreach ($child_category->categories as $childCategory) @include('child_category', ['child_category' => $childCategory]) @endforeach
    @endif
    ログイン後にコピー

    child_category.blade.php 内に @include(‘child_category’) が含まれているため、現在のサブカテゴリにカテゴリがある限り、テンプレートはサブカテゴリを再帰的に読み込みます。 ######それでおしまい!データベース、関係、ビューなど、サブカテゴリのレベルは無制限です。

    laravel フレームワークの技術記事の詳細については、

    laravelチュートリアルをご覧ください。

    以上がLaravel Eloquent の hasMany を使用して Infinitus 分類を開発するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    関連ラベル:
    ソース:learnku.com
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    最新の問題
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート
    私たちについて 免責事項 Sitemap
    PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!