sammycorgi / laravel-hierarchy
Laravel的单根节点层次实现
Requires
- php: ^8
- laravel/framework: ^8
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-27 02:31:37 UTC
README
Laravel的单根节点层次实现
安装
您可以通过composer安装此包
composer require sammycorgi/laravel-hierarchy
运行以下控制台命令发布配置
php artisan vendor:publish --provider="Sammycorgi\LaravelHierarchy\HierarchyServiceProvider" --tag="config"
如果使用EloquentPersister
,运行以下控制台命令发布HierarchyModelChildRecord的迁移
php artisan vendor:publish --provider="Sammycorgi\LaravelHierarchy\HierarchyServiceProvider" --tag="migrations"
如果您打算使用EloquentPersister
,请确保在配置中设置hierarchy.eloquent.default_model
为您的默认HasHierarchy
模型
用法
在任何Model
上实现Contracts\HasHierarchy
接口。为了方便,请使用Traits\HasHierarchy
特性来自动实现方法。默认情况下,ID/父ID属性分别为id
和parent_id
。使用此特性,每次创建、删除或更新记录的parent_id
时,所有受影响的父级都将自动更新其持久化的子ID(见下文)。
注入(或以其他方式实例化)HierarchyServiceFactory
并将实现HasHierarchy
的Model
传递到getChildIdsFor()
方法中,以返回属于传递的模型子级的ID集合。调用for()
方法以返回具有自动解析依赖项的HierarchyService
。您还可以向此方法传递参数以覆盖默认依赖项。
持久化子ID
此包使用缓存(默认)或eloquent进行持久化,以更快地获取模型的子级。如果您想实现自己的持久化器,创建一个新的类,该类实现Contracts\PersistsHierarchyChildren
接口。
默认持久化器是CachePersister
,但可以在配置中修改。只需更改配置中的hierarchy.persisters.default
,或更改.env
文件中的HIERARCHY_DEFAULT_PERSISTER
。
每次为给定的模型构建层次结构树时,子ID都将使用CachePersister
永久持久化。
使用EloquentPersister
时,将使用数据库来持久化这些子ID。新记录将添加到hierarchy_model_child_records
表中,包括模型类型、子ID和父ID。
获取模型
默认情况下,此包使用EloquentHierarchyInstanceGetter
来获取HasHierarchy
模型。如果您想实现自己的实例获取器,创建一个新的类,该类实现Contracts\GetsHierarchyInstances
接口。
默认实例获取器是EloquentHierarchyInstanceGetter
,但可以在配置中修改。只需更改配置中的hierarchy.instance_getters.default
,或更改配置数组中的其他键。