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

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

大家讲道理
풀어 주다: 2023-03-05 22:24:02
원래의
4210명이 탐색했습니다.

설명

우리 모두는 일반적으로 재귀를 사용하여 무한 분류를 구현하는 것이 매우 비효율적이라는 것을 알고 있습니다. 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(&#39;categories&#39;, function(Blueprint $table) {
      $table->increments(&#39;id&#39;);

         // 这四行代码
      $table->integer(&#39;parent_id&#39;)->nullable();
      $table->integer(&#39;lft&#39;)->nullable();
      $table->integer(&#39;rgt&#39;)->nullable();
      $table->integer(&#39;depth&#39;)->nullable();

      $table->string(&#39;name&#39;, 255);

      $table->timestamps();
    });
  }}
로그인 후 복사

4. #

Inherit BaumNode

class Category extends Baum\Node {}
로그인 후 복사

상속 후 다음 속성을 재정의할 수 있습니다.

class Category extends Baum\Node {
  protected $table = &#39;categories&#39;;

  // &#39;parent_id&#39; column name
  protected $parentColumn = &#39;parent_id&#39;;

  // &#39;lft&#39; column name
  protected $leftColumn = &#39;lidx&#39;;

  // &#39;rgt&#39; column name
  protected $rightColumn = &#39;ridx&#39;;

  // &#39;depth&#39; column name
  protected $depthColumn = &#39;nesting&#39;;

  // guard attributes from mass-assignment
  protected $guarded = array(&#39;id&#39;, &#39;parent_id&#39;, &#39;lidx&#39;, &#39;ridx&#39;, &#39;nesting&#39;);}
로그인 후 복사

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

$root = Tag::create([&#39;name&#39; => &#39;Root&#39;]);

// 创建子标签
$child1 = $root->children()->create([&#39;name&#39; => &#39;Child1&#39;]);

$child = Tag::create([&#39;name&#39; => &#39;Child2&#39;]);
$child->makeChildOf($root);

// 批量构建树
$tagTree = [
    &#39;name&#39; => &#39;RootTag&#39;,
    &#39;children&#39; => [
        [&#39;name&#39; => &#39;L1Child1&#39;,
            &#39;children&#39; => [
                [&#39;name&#39; => &#39;L2Child1&#39;],
                [&#39;name&#39; => &#39;L2Child1&#39;],
                [&#39;name&#39; => &#39;L2Child1&#39;],
            ]
        ],
        [&#39;name&#39; => &#39;L1Child2&#39;],
        [&#39;name&#39; => &#39;L1Child3&#39;],
    ]
];

Tag::buildTree($tagTree);
로그인 후 복사

사용

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿