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,或更改配置数组中的其他键。