ronappleton/organisational-unit

用于管理组织结构的模式,从管理层结构到公司结构,到任何类型的组织结构。

dev-master 2024-09-29 13:31 UTC

This package is auto-updated.

Last update: 2024-09-29 14:16:10 UTC


README

Laravel Codacy Badge Codacy Badge

OrganisationalUnit包提供了一种在组织内部管理层次结构的方法。这个Eloquent模型允许创建、检索和操作组织单元及其关系,包括父子关系。

目录

安装

您可以通过Composer安装此包

composer require appleton/organisational-unit

使用

要使用OrganisationalUnit模型,只需创建一个新的实例并设置所需的属性

use Appleton\OrganisationalUnit\Models\OrganisationalUnit;

 $unit = new OrganisationalUnit();
 $unit->entity_id = 1;
 $unit->entity_type = SomeType::class;
 $unit->save();

您还可以创建父子关系

 $unit = OrganisationalUnit::create(['entity_id' => 'parent-entity', 'entity_type' => 'ParentType']);
 $unit = OrganisationalUnit::create(['entity_id' => 'child-entity', 'entity_type' => 'ChildType', 'parent_id' => ]);

模型属性

  • id:组织单元的唯一标识符(可以是整数或UUID)。
  • parent_id:父组织单元的ID。
  • entity_id:关联实体的标识符。
  • entity_type:关联实体的类型。

关系

public function entity(): MorphTo

返回组织单元的关联实体。

public function parent(): BelongsTo

返回父组织单元。

public function children(): HasMany

返回子组织单元。

作用域

 public function scopeEntityType(Builder $query, string $type): Builder

按实体类型筛选单位。

 public function scopeRoot(Builder $query): Builder

筛选根单位(无父级)。

实用函数

public function getTree(bool $withEntities = true): Collection

获取组织单元树,可选地带有关联实体。

public function buildTree(int|string|null $parentId = null): Collection

递归构建组织单元树。

public function moveToParent(int|string|null $newParentId): void

将组织单元移动到新的父级。

public function detachFromParent(): void

从当前父级断开组织单元。

public function rebuildTreeFromFlatList(Collection $flatUnits): void

从单位平面列表重建树结构。

public function descendants(): Collection

获取组织单元的后代。

public function getParentChain(): Collection

获取从根到组织单元的父组织单元链(祖先)。

public function getSiblings(): Collection

获取组织单元的直接兄弟姐妹。

public function getAllRoots(): Collection

获取所有根组织单元(无父级的节点)。

public function getDescendantsCount(): int

获取当前组织单元后代的总数。

public function getFieldsByConditions(array $fields, array $conditions): Collection

获取符合给定条件的组织单元指定字段,沿着树路径。

public function isRoot(): bool

检查组织单元是否是根节点。

public function isLeaf(): bool

检查组织单元是否是叶节点(无子级)。

贡献

如果您想为此包做出贡献,请分叉存储库并提交拉取请求。

许可

此包是开源软件,根据MIT许可证授权。