资源
删除记录
处理软删除
使用软删除创建资源
默认情况下,你无法在应用中与已经删除的记录进行交互。如果你想在资源中添加恢复、强制删除和过滤被丢弃的记录的功能,请在生成资源时使用 -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()
策略的性能不是很好。
Still need help? Join our Discord community or open a GitHub discussion