删除记录


处理软删除


创建带软删除的资源
默认情况下,你无法在应用中操作已删除的记录。若希望在资源中恢复、强制删除并筛选已删除记录,生成资源时请使用 --soft-deletes 标志:
bash
php artisan make:filament-resource Customer --soft-deletes为现有资源添加软删除
或者,你也可以为现有资源添加软删除功能。
首先,需要更新资源:
php
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteAction;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\ForceDeleteAction;
use Filament\Actions\ForceDeleteBulkAction;
use Filament\Actions\RestoreAction;
use Filament\Actions\RestoreBulkAction;
use Filament\Tables\Filters\TrashedFilter;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
public static function table(Table $table): Table
{
return $table
->columns([
// ...
])
->filters([
TrashedFilter::make(),
// ...
])
->recordActions([
// You may add these actions to your table if you're using a simple
// resource, or you just want to be able to delete records without
// leaving the table.
DeleteAction::make(),
ForceDeleteAction::make(),
RestoreAction::make(),
// ...
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
ForceDeleteBulkAction::make(),
RestoreBulkAction::make(),
// ...
]),
]);
}
public static function getRecordRouteBindingEloquentQuery(): Builder
{
return parent::getRecordRouteBindingEloquentQuery()
->withoutGlobalScopes([
SoftDeletingScope::class,
]);
}然后,如果有编辑页面类,请更新它:
php
use Filament\Actions;
protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
Actions\ForceDeleteAction::make(),
Actions\RestoreAction::make(),
// ...
];
}在列表页删除记录
默认情况下,你可以在表格中批量删除记录。若还想删除单条记录,可使用 DeleteAction:
php
use Filament\Actions\DeleteAction;
use Filament\Tables\Table;
public static function table(Table $table): Table
{
return $table
->columns([
// ...
])
->recordActions([
// ...
DeleteAction::make(),
]);
}授权
对于授权,Filament 会遵循应用中已注册的任意 模型策略。
若模型策略的 delete() 方法返回 true,用户即可删除记录。
若策略的 deleteAny() 方法返回 true,用户还可批量删除记录。Filament 使用 deleteAny(),因为逐条检查 delete() 策略性能不佳。
可在 BulkDeleteAction 上使用 authorizeIndividualRecords(),逐条检查 delete() 策略。
软删除授权
forceDelete() 策略方法用于阻止强制删除单条已软删除记录。forceDeleteAny() 用于阻止批量强制删除。Filament 使用 forceDeleteAny(),因为逐条检查 forceDelete() 策略性能不佳。
restore() 策略方法用于阻止恢复单条已软删除记录。restoreAny() 用于阻止批量恢复。Filament 使用 restoreAny(),因为逐条检查 restore() 策略性能不佳。