novius/laravel-nova-order-nestedset-field

一个Laravel Nova字段,使您的资源可排序

v4.0.0 2022-04-26 12:07 UTC

This package is auto-updated.

Last update: 2024-09-26 11:18:23 UTC


README

Travis Packagist Release Licence

一个字段,使用 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 或(根据您的选择)任何后续版本下。