Skip to content
全部文档

删除记录 ​

删除确认模态删除确认模态

处理软删除 ​

带已删除筛选的资源列表带已删除筛选的资源列表

创建带软删除的资源 ​

默认情况下,你无法在应用中操作已删除的记录。若希望在资源中恢复、强制删除并筛选已删除记录,生成资源时请使用 --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() 策略性能不佳。