Languages

Version

Theme

资源

删除记录

处理软删除

使用软删除创建资源

默认情况下,你无法在应用中与已经删除的记录进行交互。如果你想在资源中添加恢复、强制删除和过滤被丢弃的记录的功能,请在生成资源时使用 -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() 策略的性能不是很好。

Edit on GitHub

Still need help? Join our Discord community or open a GitHub discussion

Previous
查看记录