ronappleton / organisational-unit
用于管理组织结构的模式,从管理层结构到公司结构,到任何类型的组织结构。
dev-master
2024-09-29 13:31 UTC
Requires
- php: ^8.3
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/framework: ^11.25
- laravel/pint: ^1.18
- orchestra/testbench: ^9.5
- phpstan/phpstan: ^1.12
- phpunit/phpunit: ^11.3
This package is auto-updated.
Last update: 2024-09-29 14:16:10 UTC
README
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许可证授权。