寫了個 Laravel 高效樹結構生成的擴充套件

lyxxxh發表於2019-06-08

介紹

高效生成系統樹
用於無限級分類

例如:樓中樓評論 獲取下級分類等

只會產生一個sql並且速度非常快

支援

僅支援adjacency結構
例如(classify表id(兒子) pid(父親) )

測試 (只統計生成樹使用的時間)

測試

資料量(條) 時間(s) 記憶體(m)
756 0.022 0.83
5256 0.075 2.84
11256 0.16 5.67
48843 0.883 24.63
108843 1.80 52.42

傻瓜式一次次查詢

傻瓜式

查詢到1 where pid = 1 
查詢到2 where pid = 2 
查詢到3 where pid = 3
資料量(條) 時間(s) 記憶體(m)
146 0.72 2.81
646 3.01 10.84
2646 13.34 42.91

安裝

  1. composer require lyxxxh/lartree

檢視例子(不使用也可以)

例子

1.在app/config.php的providers新增
  Xxh\LarModel\LarTreeProvider::class
2. php artisan vendor:publish --provider="Xxh\LarModel\LarTreeProvider::class"
3. 匯入user 下面附資料庫 (我測試的資料庫)

600條sql
4w條sql
10w條sql

生成樹使用方法(可參考vendor/lyxxxh/lartree/src/LarController.php)

 //引入名稱空間
 use Xxh\LarTree\Services\LarTreeServices;
 class LarController extends Controller {

   use LarTree; //使用LarTree
    public function index()
    {
       //設定需要的欄位  為了更快速  不設定也可以
       $this->setField(['id','pid','name']);

       //預設是id pid
      // $this->setFatherSonName('子id','父id');

      //設定表 把查詢到的所有結果先存到$datas變數
      $this->initTableConainer('users');

      //最開始的父id
      $data = $this->getTableTree(0);

      dd($data);//獲取樹結構了
    }     

 }

自定義

vendor/lyxxxh/lartree/src/LarTree.php使用trait

根據需求重寫裡面的所有方法(看原始碼)

例如獲取文章的評論
你完全可以複製程式碼 然後重寫setDataContainer($data)

擴充套件原始碼

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章