ホームページ > バックエンド開発 > PHPチュートリアル > Baum ネストされたセット モデルを使用して Laravel モデルの無限分類を実装する

Baum ネストされたセット モデルを使用して Laravel モデルの無限分類を実装する

WBOY
リリース: 2016-06-20 12:28:35
オリジナル
1156 人が閲覧しました

この記事は許可を得て PHPHub コミュニティから転載されています

Baum ネストされたセット モデルを使用して Laravel モデルの無限分類を実装します

手順

通常、再帰が Infinitus 分類の実装に使用されることは誰もが知っていますが、ここでは、データ モデルが Infinitus ツリーのような階層構造をサポートできるようにするために、Laravel 拡張パッケージ etrepat/baum を推奨します。アカウントの効率性。

Nested set モデルの詳細については、wiki

拡張パックの公式ドキュメントに説明スペースがあります。以下の図も簡単な例です。 🎜>

ファイル

ユースケースの説明

次に、無限ツリー階層モデルのいくつかの例について説明します。

タグシステム

参考: Laravel タグ付け可能 タグは無数の子タグを持つことができ、1 つの親タグに属し、複数のピアタグを持つことができます。

たとえば、以下のタグ ツリー:

コメント システム
$tagTree = [    'name' => 'RootTag',    'children' => [        ['name' => 'L1Child1',            'children' => [                ['name' => 'L2Child1'],                ['name' => 'L2Child1'],                ['name' => 'L2Child1'],            ]        ],        ['name' => 'L1Child2'],        ['name' => 'L1Child3'],    ]];
ログイン後にコピー

NetEase のコメント システムなど、無限にネストされたコメント。

ファイル

Laravel には無限のネストをサポートするコメント拡張機能があります。Slynova-Org/laravel-commentable を参照してください。

「ナビゲーション バー」データ モデル

管理者のバックグラウンドは、「ナビゲーション バー」のカスタマイズ機能とツリー構造のナビゲーション バーを提供する必要があります。

ファイル

Integrated Baum

etrepat/baum を使用すると、効率を考慮しながらデータ モデルが Infinitus ツリー階層構造をサポートできるようになります。

次に統合方法について説明します。

1. Composer をインストールします

2. プロバイダーを追加します
composer require "baum/baum:~1.1"
ログイン後にコピー

config/app.php ファイルを変更し、次の内容を追加します:

サービスプロバイダーには、artisan baum、artisan baum.install という 2 つのコマンドが登録されています。
'Baum\Providers\BaumServiceProvider',
ログイン後にコピー

3. 移行を作成します

を既存のデータ モデルにインストールします:

次に、
php artisan baum:install MODEL
ログイン後にコピー

移行に関するフィールドの概要
php artisan migrate
ログイン後にコピー

parent_id: 親ノードの ID
  • lft: 左のインデックス値
  • rgt: 右のインデックス値
  • Depth: 階層の深さ
  • 次に例を示します。

4. 構成データ モデル
class Category extends Migration {  public function up() {    Schema::create('categories', function(Blueprint $table) {      $table->increments('id');         // 这四行代码      $table->integer('parent_id')->nullable();      $table->integer('lft')->nullable();      $table->integer('rgt')->nullable();      $table->integer('depth')->nullable();      $table->string('name', 255);      $table->timestamps();    });  }}
ログイン後にコピー

Inherit BaumNode

継承後、これらの属性はオーバーライドできます。 :
class Category extends Baum\Node {}
ログイン後にコピー

統合は成功しました。
class Category extends Baum\Node {  protected $table = 'categories';  // 'parent_id' column name  protected $parentColumn = 'parent_id';  // 'lft' column name  protected $leftColumn = 'lidx';  // 'rgt' column name  protected $rightColumn = 'ridx';  // 'depth' column name  protected $depthColumn = 'nesting';  // guard attributes from mass-assignment  protected $guarded = array('id', 'parent_id', 'lidx', 'ridx', 'nesting');}
ログイン後にコピー

引用: https://phphub.org/topics/2123

タグを従属させるために etrepat/baum を統合します。

関連する操作の詳細については、etrepat/baum を確認してください。
$root = Tag::create(['name' => 'Root']);// 创建子标签$child1 = $root->children()->create(['name' => 'Child1']);$child = Tag::create(['name' => 'Child2']);$child->makeChildOf($root);// 批量构建树$tagTree = [    'name' => 'RootTag',    'children' => [        ['name' => 'L1Child1',            'children' => [                ['name' => 'L2Child1'],                ['name' => 'L2Child1'],                ['name' => 'L2Child1'],            ]        ],        ['name' => 'L1Child2'],        ['name' => 'L1Child3'],    ]];Tag::buildTree($tagTree);
ログイン後にコピー

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート