설명
우리 모두는 일반적으로 재귀를 사용하여 무한 분류를 구현하는 것이 매우 비효율적이라는 것을 알고 있습니다. etrepat/baum을 사용하면 효율성을 고려하면서 데이터 모델이 무한 트리 계층 구조를 지원하도록 빠르게 만들 수 있습니다.
Baum 중첩 집합 모델을 사용하여 Laravel 모델의 무한 분류 구현
확장 패키지의 공식 문서에는 설명할 공간이 있으며, 아래 그림은 또한 하나의 간단한 예:
다음으로 무한 트리 계층 모델의 몇 가지 예에 대해 이야기해 보겠습니다.
참조: Laravel Taggable 모델에 태그 지정 기능을 추가하세요. 태그는 수많은 하위 태그를 가질 수 있고, 하나의 상위 태그에 속할 수 있으며, 여러 피어 태그를 가질 수 있습니다.
예를 들어 이 태그 트리는 다음과 같습니다.
$tagTree = [ 'name' => 'RootTag', 'children' => [ ['name' => 'L1Child1', 'children' => [ ['name' => 'L2Child1'], ['name' => 'L2Child1'], ['name' => 'L2Child1'], ] ], ['name' => 'L1Child2'], ['name' => 'L1Child3'], ]];
NetEase의 댓글 시스템과 같이 댓글이 무한 중첩됩니다.
Laravel에는 무한 중첩을 지원하는 주석 확장 기능이 있습니다. Slynova-Org/laravel-commentable을 참조하세요.
관리자 배경에는 "탐색 모음" 사용자 정의 기능과 트리 구조 탐색 모음을 제공해야 합니다.
etrepat/baum을 사용하면 데이터 모델이 효율성을 고려하면서 Infinitus 트리 계층 구조를 신속하게 지원할 수 있습니다.
다음으로 통합 방법에 대해 말씀드리겠습니다.
composer require "baum/baum:~1.1"
config/app.php
파일을 수정하고 providers
'Baum\Providers\BaumServiceProvider',를 추가합니다. array 이 서비스 제공자는
, artisan baum
라는 두 가지 명령을 등록합니다. artisan baum.install
php artisan baum:install MODEL그런 다음
php artisan migrate마이그레이션 필드 소개#
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(); }); }}
4. #
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');}
통합이 성공적으로 완료되었습니다.
$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);
사용