kainiklas / filament-scout
将Filament插件集成到全局搜索和表格搜索中。
Requires
- php: ^8.1
- filament/filament: ^3.0
- laravel/scout: ^10.5
- spatie/laravel-package-tools: ^1.15.0
Requires (Dev)
- larastan/larastan: ^2.1
- laravel/pint: ^1.13
- orchestra/testbench: ^8.10|^9.0
- pestphp/pest: ^2.10
- 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
README
插件,用于将Laravel Scout集成到Filament的全局搜索和表格搜索中。还包含一个ScoutSelect组件,它增强了标准选择字段的功能,使其具有scout搜索能力。
先决条件
- Laravel Scout:根据Laravel文档中的说明安装和配置Laravel Scout。
安装
您可以通过composer安装此包
composer require kainiklas/filament-scout
表格搜索
要使用Scout搜索而不是表格上的默认搜索,请将特性InteractsWithScout
添加到包含表格的任何页面中,例如app\Filament\Resources\MyResource\Pages\ListMyResources.php
use Kainiklas\FilamentScout\Traits\InteractsWithScout; class ListMyResources extends ListRecords { use InteractsWithScout; }
在资源中定义的表格需要像在Filament表格文档中描述的那样进行searchable()
。不再需要为每个列设置可搜索性,因为可搜索的内容定义在Scout中。
增加搜索结果数量
根据Scout引擎,您可能对获取的搜索结果数量有限制。这可以在两个地方进行调整
1. 搜索限制
添加以下env
变量以调整搜索结果限制
SCOUT_SEARCH_LIMIT=100
100
是此包中的默认值。例如,meilisearch的默认限制为20
。
2. 索引设置(以meilisearch为例)
在meilisearch中,默认总命中数为1000
,这也是搜索限制的上限。这意味着如果想要超过1000
个搜索结果,需要调整搜索限制和索引设置。索引设置可以在config\scout.php
中进行调整。
'index-settings' => [ MyClass::class => [ 'pagination' => [ 'maxTotalHits' => 10000 ], ], ],
然后运行以下命令同步设置:php artisan scout:sync-index-settings
全局搜索
- 请参阅Filament文档中的全局搜索启用方法。
- 在资源上设置
$recordTitleAttribute
:设置全局搜索结果标题。 - (可选) 在您的资源中实现方法
getGlobalSearchResultDetails(Model $record)
以添加详细信息:向全局搜索结果添加额外详细信息。
- 在资源上设置
class ContractResource extends Resource { // required to enable global search protected static ?string $recordTitleAttribute = 'name'; // optional: details public static function getGlobalSearchResultDetails(Model $record): array { return [ 'Category' => $record->category->name, ]; } }
- 将插件
FilamentScoutPlugin
添加到您的面板配置中,例如在app\Providers\Filament\AdminPanelProvider.php
中。
use Kainiklas\FilamentScout\FilamentScoutPlugin; class AdminPanelProvider extends PanelProvider { public function panel(Panel $panel): Panel { return $panel $plugins([ FilamentScoutPlugin::make() ]); } }
Meilisearch
如果您使用Meilisearch,您可以激活meilisearch特定的功能(搜索上下文高亮)
- 配置插件。
use Kainiklas\FilamentScout\FilamentScoutPlugin; class AdminPanelProvider extends PanelProvider { public function panel(Panel $panel): Panel { return $panel $plugins([ FilamentScoutPlugin::make() ->useMeilisearch() // enables meilisearch specific features ]); } }
- (可选) 在您的资源中实现/调整
getGlobalSearchResultDetails()
public static function getGlobalSearchResultDetails(Model $record): array { // change the filament default implementation from this // return [ // 'AttributeTitle' => $record->attribute_name // ]; // to this return [ 'scout_attribute_name' => "AttributeTitle" ]; }
选择表单字段
要启用选择表单字段中的scout搜索,请使用提供的ScoutSelect
组件
use Kainiklas\FilamentScout\Forms\Components\ScoutSelect; ScoutSelect::make('company_id') ->searchable() ->relationship('company', 'name') ->useScout() // must be called after relationship()
从技术上讲,ScoutSelect
组件继承自 Filament\Forms\Components\Select
。 useScout()
方法设置一个新的 getSearchResultsUsing()
闭包,该闭包使用 scout。
重要:必须在关系方法之后调用 useScout()
方法。否则,它将被 relationship()
方法覆盖。
提示:只有由 scout 可访问和定义的值才可搜索。
测试
composer test
变更日志
有关最近更改的更多信息,请参阅 变更日志。
贡献
有关详细信息,请参阅 贡献指南。
安全漏洞
请查阅我们关于如何报告安全漏洞的 安全策略。
鸣谢
许可协议
MIT 许可协议 (MIT)。有关更多信息,请参阅 许可文件。