ohhink/relation

User Hierarchical Relationship

1.0.2 2021-10-25 01:07 UTC

This package is auto-updated.

Last update: 2024-04-25 06:19:54 UTC


README

standard-readme compliant

English 中文

快速创建层级架构,可用于上下级明确,多层级的任意应用

本拓展包运行基础环境:

  1. Php >= 8.0
  2. Laravel Version >= 8.6

内容列表

背景

在实际开发中,经常会碰到多层级的组织架构。例如:

 A 项目 -> B 项目 -> C 项目 -> D 项目 ... -> Z 项目
 
 表示:Z项目属于A项目的N级子项目

当Z向上找A,或者A向下找Z的时候,如果处理不当,任务的时间复杂度就会变成O(N)。

此拓展包可将上述情况的时间复杂度变为O(1),并提供相应接口,实现隐式调用。

安装

在项目根目录运行 composer

$ composer require ohhink/relation

根目录下运行资源发布,此命令会增加配置文件(relationship.php)

$ php artisan vendor:publish

根目录下运行数据库迁移填充命令

# run autoload first
$ composer dump-autoload
$ php artisan migrate

向 User 模型添加 HasRelationship Trait

<?php

namespace App\Models;

use Ohh\Relation\App\Models\Traits\HasRelationship;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable, HasRelationship;
}

至此,安装完毕

使用说明

方法名 居中对齐 示例
directChildren 获取直接下级 $user->directChildren
directParent 获取直接上级 $user->directParent
recursionChildren 已当前节点,向下生成树 $user->recursionChildren
sblings 获取兄弟节点 $user->sblings
allChildren 获取全部下级, asc 依次向下 / desc 从最底层往上 $user->allChildren() / User::allChildren(1, "asc")
allParents 获取全部上级, asc 依次向上 / desc 从最高层向下 $user->allParents() / User::allParents(5, "asc")
transfer 转移节点,成为目标节点的子节点 $user->transfer(1) / User::transfer(1, 5)
delNode 删除当前节点,用下级节点代替本级节点 $user->delNode() / User::delNode(1)
removeNode 删除当前节点及子节点 $user->removeNode() / User::removeNode(1)

维护者

@OhhInk.

如何贡献

非常欢迎你的加入! 有任何问题或者想要贡献代码,请提交 issue

使用许可

MIT © OhhInk