codewithdennis/filament-select-tree

多级选择字段允许您从组织成多个层级或深度的预定义选项列表中进行单选。


README

Latest Version on Packagist Total Downloads

此包为您的Laravel / Filament应用程序添加了一个动态选择树字段,允许您根据关系创建交互式的层次结构选择下拉菜单。这对于构建具有各种自定义选项的选择下拉菜单非常有用。

thumbnail

安装

您可以通过composer安装此包

composer require codewithdennis/filament-select-tree
php artisan filament:assets

关系

使用树形结构实现 BelongsToMany 关系

SelectTree::make('categories')
    ->relationship('categories', 'name', 'parent_id')

使用树形结构实现 BelongsTo 关系

SelectTree::make('category_id')
    ->relationship('category', 'name', 'parent_id')

自定义查询

自定义父查询

SelectTree::make('categories')
    ->relationship(relationship: 'categories', titleAttribute: 'name', parentAttribute: 'parent_id', modifyQueryUsing: fn($query) => $query));

自定义子查询

SelectTree::make('categories')
    ->relationship(relationship: 'categories', titleAttribute: 'name', parentAttribute: 'parent_id', modifyChildQueryUsing: fn($query) => $query));

方法

设置未选择项目时的自定义占位符

->placeholder(__('Please select a category'))

启用选择组

->enableBranchNode()

在无搜索结果时自定义标签

->emptyLabel(__('Oops, no results have been found!'))

在组名旁边显示子项计数

->withCount()

始终打开下拉菜单

->alwaysOpen()

将节点设置为依赖项

->independent(false)

根据选择值展开树(仅当字段为依赖项时适用)

->expandSelected(false)

将父级的空值设置为-1,允许您使用-1作为哨兵值(默认 = null)

->parentNullValue(-1)

所有组都将展开到此级别

->defaultOpenLevel(2)

指定列表的强制方向。选项包括:auto(默认)、top和bottom。

->direction('top')

当所有叶节点被选中时,显示单独的叶节点而不是主组

->grouped(false)

隐藏可清除图标

->clearable(false)

激活搜索功能

->searchable();

禁用树中的特定选项

->disabledOptions([2, 3, 4])

隐藏树中的特定选项

->hiddenOptions([2, 3, 4])

允许显示软删除的项目

->withTrashed()

指定模型的键。例如:您有id、code和parent_code。您的模型使用id作为键,但父子关系在code和parent_code之间建立

->withKey('code')

为附加功能存储检索到的模型

->storeResults()

现在您可以在disabledOptionshiddenOptions中访问结果

->disabledOptions(function ($state, SelectTree $component) {
    $results = $component->getResults();
})

筛选器

在您的表格筛选器中使用树形结构。以下是一个示例。

use Filament\Tables\Filters\Filter;
use Illuminate\Database\Eloquent\Builder;
use CodeWithDennis\FilamentSelectTree\SelectTree;
->filters([
    Filter::make('tree')
        ->form([
            SelectTree::make('categories')
                ->relationship('categories', 'name', 'parent_id')
                ->independent(false)
                ->enableBranchNode(),
        ])
        ->query(function (Builder $query, array $data) {
            return $query->when($data['categories'], function ($query, $categories) {
                return $query->whereHas('categories', fn($query) => $query->whereIn('id', $categories));
            });
        })
        ->indicateUsing(function (array $data): ?string {
            if (! $data['categories']) {
                return null;
            }

            return __('Categories') . ': ' . implode(', ', Category::whereIn('id', $data['categories'])->get()->pluck('name')->toArray());
        })
])

屏幕截图

example-1 example-2 example-3

贡献

有关详细信息,请参阅CONTRIBUTING

安全漏洞

请查阅我们的安全策略,了解如何报告安全漏洞。

鸣谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件