全局搜索

Resources

全局搜索允许你在后台面板的任何地方搜索所有的资源记录。

Title

要在模型中启用全局搜索,你必须先为资源设置一个title属性

protected static ?string $recordTitleAttribute = 'title';

这一属性用于检索搜索结果的标题。

你可以重写 getGlobalSearchResultTitle() 方法进一步自定义title:

public static function getGlobalSearchResultTitle(Model $record): string
{
return $record->name;
}

多字段搜索

如果你想要在资源中搜索多个字段,你可以重写 getGloballySearchableAttributes() 方法。“点语法”让你可以在内部搜索关联:

public static function getGloballySearchableAttributes(): array
{
return ['title', 'slug', 'author.name', 'category.name'];
}

详情

搜索结果可以标题的下面显示“详情(Details)”,让用户获取更多记录信息。要启用此特性,你必须重写 getGlobalSearchResultDetails() 方法:

public static function getGlobalSearchResultDetails(Model $record): array
{
return [
'Author' => $record->author->name,
'Category' => $record->category->name,
];
}

此例中,记录的分类和作者会显示在搜索结果的标题下面。不过,categoryauthor 关联是通过懒加载实现,会导致性能不佳。想要积极加载这些关联,必须重写 getGlobalSearchEloquentQuery() 方法:

protected static function getGlobalSearchEloquentQuery(): Builder
{
return parent::getGlobalSearchEloquentQuery()->with(['author', 'category']);
}

URL

全局搜索结果会链接到资源的编辑页,或在用户没有编辑权限的时候链接到[查看页]。要自定义,可以重写 getGlobalSearchResultUrl(),返回你希望的路由:

public static function getGlobalSearchResultUrl(Model $record): string
{
return UserResource::getUrl('edit', ['record' => $record]);
}

操作

全局搜索支持渲染操作按钮或链接,籍此打开一个网址或者发起一个Livewire事件。操作默认会被渲染成链接,不过你也可以使用 button() 方法将其渲染成按钮。

操作可以按如下方式定义:

use Filament\GlobalSearch\Actions\Action;
 
public static function getGlobalSearchResultActions(Model $record): array
{
return [
Action::make('edit')
->iconButton()
->icon('heroicon-s-pencil')
->url(static::getUrl('edit', ['record' => $record])),
];
}

需要帮助? 加入论坛 或者打开 GitHub讨论

喜欢Filament?

Filament 中文文档由 laravel-filament.cn 翻译整理。站长用爱发电,希望为英文阅读不畅的朋友提供快速掌握Filament框架的途径。文档的翻译,社区的运营维护都需要时间精力上的付出。如果文档社区使你受益,如果你想支持站长...

打赏