展示记录
使用标签页过滤记录
你可以在表格上面添加标签页,使之基于预定义条件过滤记录。每个标签页以不同的方式设置表格的 Eloquent 查询范围。要注册标签页,在列表页类中添加 getTabs()
方法,并返回一个 Tab
对象数组:
use Filament\Resources\Pages\ListRecords\Tab;
use Illuminate\Database\Eloquent\Builder;
public function getTabs(): array
{
return [
'all' => Tab::make(),
'active' => Tab::make()
->modifyQueryUsing(fn (Builder $query) => $query->where('active', true)),
'inactive' => Tab::make()
->modifyQueryUsing(fn (Builder $query) => $query->where('active', false)),
];
}
自定义过滤器标签页标签
数组的键将用作选项卡的标识符,因此它们可以持久化在 URL 的查询字符串中。每个选项卡的标签也是由键生成的,但您可以通过将标签传递到选项卡的 make()
方法来覆盖它:
use Filament\Resources\Pages\ListRecords\Tab;
use Illuminate\Database\Eloquent\Builder;
public function getTabs(): array
{
return [
'all' => Tab::make('All customers'),
'active' => Tab::make('Active customers')
->modifyQueryUsing(fn (Builder $query) => $query->where('active', true)),
'inactive' => Tab::make('Inactive customers')
->modifyQueryUsing(fn (Builder $query) => $query->where('active', false)),
];
}
添加图标到过滤器标签页
你可以将图标传递到标签页的 icon
方法,将图标添加到标签页中:
use Filament\Resources\Pages\ListRecords\Tab;
Tab::make()
->icon('heroicon-m-user-group')
你也可以使用 iconPosition()
方法修改图标的位置,使其从标签前面移到标签后面:
use Filament\Support\Enums\IconPosition;
Tab::make()
->icon('heroicon-m-user-group')
->iconPosition(IconPosition::After)
添加徽章到过滤器标签页
你可以将字符串传递给标签页的 badge()
方法 ,在标签页中添加徽章:
use Filament\Resources\Pages\ListRecords\Tab;
Tab::make()
->badge(Customer::query()->where('active', true)->count())
如上例所示,该方法对于统计过滤 器中的记录数量非常有用。
授权
关于授权,Filament 会监听所有应用中注册的模型策略。
如果模型策略的 viewAny()
方法返回 true
,则用户可以访问列表页。
reorder()
方法用于控制重排记录。
自定义表格 Eloquent 查询
尽管你可以为整个资源自定义 Eloquent 查询,你也可以为列表页表格进行特定修改。为此,请在列表页类中使用 modifyQueryUsing()
方法:
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
public function table(Table $table): Table
{
return $table
->modifyQueryUsing(fn (Builder $query) => $query->withoutGlobalScopes());
}