跳到主要内容
版本:4.x

删除记录

处理软删除​

使用软删除创建资源​

默认情况下,你无法在应用中与已经删除的记录进行交互。如果你想在资源中添加恢复、强制删除和过滤被丢弃的记录的功能,请在生成资源时使用 -soft-deletes 标志:

php artisan make:filament-resource Customer --soft-deletes

添加软删除到现有资源​

此外,你也可以将软删除功能添加到现有资源。

首先,你需要更新资源:

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 getEloquentQuery(): Builder
{
return parent::getEloquentQuery()
->withoutGlobalScopes([
SoftDeletingScope::class,
]);
}

然后,如果有编辑页类,请更新:

use Filament\Actions;

protected function getHeaderActions(): array
{
return [
Actions\DeleteAction::make(),
Actions\ForceDeleteAction::make(),
Actions\RestoreAction::make(),
// ...
];
}

在列表页删除记录​

默认情况下,你可以在表格中批量删除记录。如果你想删除单条记录,请使用 DeleteAction:

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 上使用 authorizedIndividualRecords() 方法,单独检查每条记录的 delete() 策略。

授权软删除​

forceDelete() 策略方法用于防止强制删除单个软删除记录。forceDeleteAny() 用于防止记录被批量强制删除。Filament 使用 forceDeleteAny() 方法,因为迭代多条记录并检查 forceDelete() 策略的性能不是很好。

restore() 策略方法用于防止恢复单个软删除的记录。restoreAny() 用于防止记录被批量还原。Filament 使用 restoreAny() 方法,因为迭代多条记录并检查 restore() 策略的性能不是很好。