paxha / laravel-recursive-relationships
这个Laravel Eloquent扩展通过公共表提供递归关系
v1.1.0
2020-12-17 16:18 UTC
Requires
- php: ^7.2|^8.0
Requires (Dev)
- orchestra/testbench: ^4.4
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-18 01:14:05 UTC
README
介绍
这个Laravel Eloquent扩展通过公共表提供递归关系
安装
composer require paxha/laravel-recursive-relationships
用法
入门
考虑以下表结构用于层次数据
Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->unsignedInteger('parent_id')->nullable(); });
在模型中使用 HasRecursiveRelationships
特性以处理递归关系
class User extends Model { use \RecursiveRelationships\Traits\HasRecursiveRelationships; }
默认情况下,特性期望一个名为 parent_id
的父键。您可以通过覆盖 getParentKeyName()
来自定义它
class User extends Model { use \RecursiveRelationships\Traits\HasRecursiveRelationships; public function getParentKeyName() { return 'user_id'; // or anything } }
关系
特性提供了各种关系
children()
: 模型的直接子项。nestedChildren()
: 模型的嵌套子项。parent()
: 模型的直接父项。nestedParents()
: 模型的嵌套父项(按对象)。
$users = User::with('children')->get(); $users = User::with('nestedChildren')->get(); $users = User::with('parent')->get(); $users = User::with('nestedParents')->get();
作用域
特性提供了查询作用域以按树中的位置过滤模型
hasChildren()
: 有子项的模型。hasParent()
: 有父项的模型。leaf()
: 没有子项的模型。root()
: 没有父项的模型。
$noLeaves = User::hasChildren()->get(); $noRoots = User::hasParent()->get(); $leaves = User::leaf()->get(); $roots = User::root()->get();
函数
特性提供了辅助函数
descendents()
: 模型的所有子项在单个数组中。ancestors()
: 模型的所有父项在单个数组中。siblings()
: 父项的其他子项。
$descendents = User::find($id)->descendents(); $ancestors = User::find($id)->ancestors(); $siblings = User::find($id)->siblings();
许可证
这是一个开源的laravel库,许可协议为MIT许可证。