>백엔드 개발 >PHP 튜토리얼 >laravel은 무한 분류를 구현합니다.

laravel은 무한 분류를 구현합니다.

大家讲道理
大家讲道理원래의
2017-02-22 14:00:544213검색

설명

우리 모두는 일반적으로 재귀를 사용하여 무한 분류를 구현하는 것이 매우 비효율적이라는 것을 알고 있습니다. etrepat/baum을 사용하면 효율성을 고려하면서 데이터 모델이 무한 트리 계층 구조를 지원하도록 빠르게 만들 수 있습니다.

Baum 중첩 집합 모델을 사용하여 Laravel 모델의 무한 분류 구현

확장 패키지의 공식 문서에는 설명할 공간이 있으며, 아래 그림은 또한 하나의 간단한 예:

laravel은 무한 분류를 구현합니다.

사용 사례 설명 #

다음으로 무한 트리 계층 모델의 몇 가지 예에 대해 이야기해 보겠습니다.

태그 시스템#

참조: Laravel Taggable 모델에 태그 지정 기능을 추가하세요. 태그는 수많은 하위 태그를 가질 수 있고, 하나의 상위 태그에 속할 수 있으며, 여러 피어 태그를 가질 수 있습니다.

예를 들어 이 태그 트리는 다음과 같습니다.

$tagTree = [
    'name' => 'RootTag',
    'children' => [
        ['name' => 'L1Child1',
            'children' => [
                ['name' => 'L2Child1'],
                ['name' => 'L2Child1'],
                ['name' => 'L2Child1'],
            ]
        ],
        ['name' => 'L1Child2'],
        ['name' => 'L1Child3'],
    ]];

댓글 시스템 #

NetEase의 댓글 시스템과 같이 댓글이 무한 중첩됩니다.

laravel은 무한 분류를 구현합니다.

Laravel에는 무한 중첩을 지원하는 주석 확장 기능이 있습니다. Slynova-Org/laravel-commentable을 참조하세요.

"탐색 모음" 데이터 모델#

관리자 배경에는 "탐색 모음" 사용자 정의 기능과 트리 구조 탐색 모음을 제공해야 합니다.

laravel은 무한 분류를 구현합니다.

통합 Baum#

etrepat/baum을 사용하면 데이터 모델이 효율성을 고려하면서 Infinitus 트리 계층 구조를 신속하게 지원할 수 있습니다.

다음으로 통합 방법에 대해 말씀드리겠습니다.

1. Composer 설치#

composer require "baum/baum:~1.1"

2. 공급자 추가#

config/app.php 파일을 수정하고 providers

'Baum\Providers\BaumServiceProvider',

를 추가합니다. array 이 서비스 제공자는

, artisan baum라는 두 가지 명령을 등록합니다. artisan  baum.install

3. 마이그레이션 생성#

기존 데이터 모델에 설치:

php artisan baum:install MODEL

그런 다음

php artisan migrate

마이그레이션 필드 소개#

    parent_id: 상위 노드의 id
  • lft: 왼쪽 인덱스 값
  • rgt: 올바른 인덱스 값
  • 깊이: 계층 구조 깊이
  • 다음은 예시입니다:
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. #

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');}

통합이 성공적으로 완료되었습니다.

$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);

사용

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.