sammycorgi/laravel-hierarchy

Laravel的单根节点层次实现

v1.1.0 2021-08-19 09:16 UTC

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属性分别为idparent_id。使用此特性,每次创建、删除或更新记录的parent_id时,所有受影响的父级都将自动更新其持久化的子ID(见下文)。

注入(或以其他方式实例化)HierarchyServiceFactory并将实现HasHierarchyModel传递到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,或更改配置数组中的其他键。