twocoffeecups/lara-adjacency-list

适用于laravel的轻量级邻接表。

0.2.2.0 2024-03-25 13:14 UTC

This package is auto-updated.

Last update: 2024-09-26 11:08:58 UTC


README

用于与laravel的邻接列表一起工作的简单插件。

开发中。

兼容性

Laravel 8.x + 版本。

安装

安装包

composer require twocoffeecups/lara-adjacency-list

在您的模型中使用HasAdjacencyList特质

use TwoCoffeeCups\LaraAdjacencyList\AdjacencyList\HasAdjacencyList;

class YourModel extends Model
{
    use HasAdjacencyList;
}

在您的表模式中添加列

Schema::create('your_table_name', function (Blueprint $table) {
    $table->id();
    $table->foreignId('parentId')->nullable()->index('parentIdx')->constrained('your_table_name');
});    

或者如果您已经在数据库中有一个表,并且输入表名,则运行此命令

php artisan adjacency-list:add-parent-id

使用方法

如果您已经有一个包含父键和本地键的表,那么您可以在模型中重新定义它们的名称

use TwoCoffeeCups\LaraAdjacencyList\AdjacencyList\HasAdjacencyList;

class YourModel extends Model
{
    use HasAdjacencyList;
    
    public function getLocalIdName(): string
    {
        return 'your_local_id_name';
    }
    
    public function getParentIdName(): string
    {
        return 'your_parent_id_name';
    }
}

关系

特质有多种关系

  • children() 获取仅子节点。
  • parent() 获取父节点。
  • allAncestors() 获取祖先列表。
  • allAncestorsAndMe() 获取祖先列表,包括自身。
  • allDescendants() 获取后代列表。
  • allAncestorsAndMe() 获取祖先列表,包括自身。

方法使用

$node = Model::find($id);
$node->allAncestors();

静态方法getTree()允许您从根元素获取所有元素的树。

$tree = Model::getTree();

使用方法descendantsTree()来创建所有后代的树。

$tree = $model->descendantsTree()->get();

静态方法onlyRoots()允许您仅获取根元素。

$roots = Model::onlyRoots();