novius / laravel-nova-order-nestedset-field
一个Laravel Nova字段,使您的资源可排序
v4.0.0
2022-04-26 12:07 UTC
Requires
- php: >=8.1
- kalnoy/nestedset: ^6.0.0
- laravel/nova: ^4.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8.0
This package is auto-updated.
Last update: 2024-09-26 11:18:23 UTC
README
一个字段,使用 laravel nestedset 包 使您的资源可排序。
需求
- PHP >= 8.1
- Laravel Nova >= 4.0
注意:这些说明适用于Laravel Nova 4.0。如果您使用的是早期版本,请参阅旧版本的文档。
安装
composer require novius/laravel-nova-order-nestedset-field
配置
您可以覆盖的一些选项可用。
php artisan vendor:publish --provider="Novius\LaravelNovaOrderNestedsetField\OrderNestedsetFieldServiceProvider" --tag="config"
使用方法
步骤 1
在您的模型上使用 Kalnoy\Nestedset NodeTrait
和 Novius\LaravelNovaOrderNestedsetField Orderable
特性。
示例
use Kalnoy\Nestedset\NodeTrait; use Novius\LaravelNovaOrderNestedsetField\Traits\Orderable; class Foo extends Model { use NodeTrait; use Orderable; public function getLftName() { return 'left'; } public function getRgtName() { return 'right'; } public function getParentIdName() { return 'parent'; } }
步骤 2
将字段添加到您的资源中,并指定您资源的顺序。
use Novius\LaravelNovaOrderNestedsetField\OrderNestedsetField; class FooResource extends Resource { public function fields(Request $request) { return [ OrderNestedsetField::make('Order'), ]; } /** * @param \Illuminate\Database\Eloquent\Builder $query * @param array $orderings * @return \Illuminate\Database\Eloquent\Builder */ protected static function applyOrderings($query, array $orderings) { return $query->orderBy('left', 'asc'); } }
范围
假设您有一个 Menu
模型和 MenuItems
。这两个模型之间设置了一个一对一的关系。MenuItem
有一个 menu_id
属性来连接模型。MenuItem
包含嵌套集。显然,您希望根据 menu_id
属性分别处理每个树。为了做到这一点,您需要将此属性指定为范围属性
protected function getScopeAttributes() { return ['menu_id']; }
性能
您可以通过启用缓存来避免在大型树中的性能问题。
默认情况下,缓存是禁用的。
要使用缓存,您必须在配置文件中启用它
return [ ... 'cache_enabled' => true, ];
您必须在每次树更新时使用您的模型上的观察器(或直接在 boot 方法中)清除缓存。
namespace App\Models; use Illuminate\Database\Eloquent\Model; use Kalnoy\Nestedset\NodeTrait; use Novius\LaravelNovaOrderNestedsetField\Traits\Orderable; class Foo extends Model { use NodeTrait; use Orderable; public static function boot() { parent::boot(); if (config('nova-order-nestedset-field.cache_enabled', false)) { static::created(function (Theme $model) { $model->clearOrderableCache(); }); static::updated(function (Theme $model) { $model->clearOrderableCache(); }); static::deleted(function (Theme $model) { $model->clearOrderableCache(); }); } } }
覆盖默认语言文件
运行
php artisan vendor:publish --provider="Novius\LaravelNovaOrderNestedsetField\OrderNestedsetFieldServiceProvider" --tag="lang"
运行 php-cs
使用
composer run-script lint
贡献
欢迎贡献!在Github上留下一个问题,或创建一个Pull Request。
许可证
此包在 GNU Affero General Public License v3 或(根据您的选择)任何后续版本下。