默认情况下,您将无法在应用程序中与已删除的记录进行交互。 如果您想在您的资源中添加恢复、强制删除和筛选废弃记录的功能,请在生成资源时使用 --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 getRecordRouteBindingEloquentQuery(): Builder
{
return parent::getRecordRouteBindingEloquentQuery()
->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 上的 authorizeIndividualRecords() 方法,来单独检查每条记录的 delete() 策略。
forceDelete() 策略方法用于阻止单个软删除记录被强制删除. forceDeleteAny() 用于阻止记录被批量强制删除. Filament 使用 forceDeleteAny() 方法,因为遍历多个记录并检查 forceDelete() 策略的性能不佳.
这 restore() 策略方法用于阻止单个软删除的记录被恢复. restoreAny() 用于阻止记录被批量恢复. Filament 使用 restoreAny() 方法 因为迭代多个记录并检查 restore() 策略的性能不高.