この記事は許可を得て PHPHub コミュニティから転載されています
Baum ネストされたセット モデルを使用して Laravel モデルの無限分類を実装します
通常、再帰が Infinitus 分類の実装に使用されることは誰もが知っていますが、ここでは、データ モデルが Infinitus ツリーのような階層構造をサポートできるようにするために、Laravel 拡張パッケージ etrepat/baum を推奨します。アカウントの効率性。
Nested set モデルの詳細については、wiki
拡張パックの公式ドキュメントに説明スペースがあります。以下の図も簡単な例です。 🎜>
ファイル
ユースケースの説明
タグシステム
たとえば、以下のタグ ツリー:
コメント システム
$tagTree = [ 'name' => 'RootTag', 'children' => [ ['name' => 'L1Child1', 'children' => [ ['name' => 'L2Child1'], ['name' => 'L2Child1'], ['name' => 'L2Child1'], ] ], ['name' => 'L1Child2'], ['name' => 'L1Child3'], ]];
ファイル
Laravel には無限のネストをサポートするコメント拡張機能があります。Slynova-Org/laravel-commentable を参照してください。
「ナビゲーション バー」データ モデル
ファイル
Integrated Baum
次に統合方法について説明します。
1. Composer をインストールします
composer require "baum/baum:~1.1"
サービスプロバイダーには、artisan baum、artisan baum.install という 2 つのコマンドが登録されています。
'Baum\Providers\BaumServiceProvider',
3. 移行を作成します
次に、
php artisan baum:install MODEL
移行に関するフィールドの概要
php artisan migrate
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(); }); }}
継承後、これらの属性はオーバーライドできます。 :
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');}
タグを従属させるために 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);