creode / laravel-taxonomy
Laravel中处理分类的基础模块。
1.3.0
2023-11-01 09:35 UTC
Requires
- php: ^8.1
- illuminate/contracts: ^10.0
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.8
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.8
- pestphp/pest: ^2.20
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
This package is auto-updated.
Last update: 2024-09-04 19:43:38 UTC
README
此模块旨在允许其他模块为其模型添加分类。它提供术语的基础类和可继承的模型特性。
安装
您可以通过composer安装此包。
composer require creode/laravel-taxonomy
使用方法
本节介绍了该模块的一些特性和使用方法。
术语类
术语类对应于分类中的一个单个术语。它是一个可以用来存储关于术语的额外信息的模型。
本模块旨在允许您通过扩展基础术语类轻松创建新的术语模型。这允许您为术语添加附加功能。以下是一个如何实现的示例。
use Creode\LaravelTaxonomy\Models\Term; class Folder extends Term { /** * Machine name of the specific term to use. * * @var string */ protected $machine_name = 'folders'; }
动态关系
本模块的目标是允许其他模块向子类添加动态关系。例如,您可能想将上面的Folder
模型链接到Page
模型。这可以通过扩展TermsServiceProvider
并添加以下属性来实现。
class FolderPageServiceProvider extends TermsServiceProvider { protected $termClass = Folder::class; protected $relationClass = Page::class; protected $relationFieldId = 'folder_id'; // optional (only used if multiple is false). protected $relationshipName = 'folder'; protected $multiple = false; // optional (defaults to false). }
以这种方式添加关系允许模块之间的依赖解耦。这意味着Page
模块不需要了解Folder
模块即可在两者之间添加关系。
可继承特性
可继承特性允许您向术语添加父级关系。这对于创建术语的层次结构很有用。例如,您可能想为术语创建一个文件夹结构。
use Creode\LaravelTaxonomy\Concerns\Parentable; class Folder extends Term { use Parentable; }
迁移助手
由于此模块旨在由其他模块使用,因此它附带一个可选的助手类,可用于创建常见的Term
字段。此助手类可以用于迁移文件中,如下所示
Schema::create('folders', function (Blueprint $table) { $table->id(); $table->baseTermFields(); });
这将为您的表添加以下字段。如果您愿意,也可以手动添加这些字段
$this->string('name')->nullable(); $this->string('slug')->nullable(); $this->unsignedBigInteger('parent_id')->nullable();
测试
composer test
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
有关详细信息,请参阅贡献指南。
安全漏洞
有关如何报告安全漏洞的详细信息,请参阅我们的安全策略。
鸣谢
许可协议
MIT许可协议(MIT)。有关更多信息,请参阅许可文件。