Видалення записів · Filament
Робота зі мʼяким видаленням
Створення ресурсу з мʼяким видаленням
Типово видалені записи недоступні для взаємодії в застосунку. Якщо потрібна можливість відновлювати, остаточно видаляти й фільтрувати записи в кошику, додайте прапорець --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([
// Ці дії можна додати до таблиці, якщо ви використовуєте простий
// ресурс або просто хочете мати можливість видаляти записи, не
// покидаючи таблицю.
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() для кожного не надто продуктивно.
Щоб перевірити політику delete() для кожного запису окремо, скористайтеся методом authorizeIndividualRecords() на BulkDeleteAction.
Авторизація мʼякого видалення
Метод політики forceDelete() забороняє остаточне видалення окремого мʼяко видаленого запису. forceDeleteAny() забороняє масове остаточне видалення записів. Filament використовує метод forceDeleteAny(), бо перебирати кілька записів і перевіряти політику forceDelete() для кожного не надто продуктивно.
Метод політики restore() забороняє відновлення окремого мʼяко видаленого запису. restoreAny() забороняє масове відновлення записів. Filament використовує метод restoreAny(), бо перебирати кілька записів і перевіряти політику restore() для кожного не надто продуктивно.
Перекладаємо з офіційної документації, розділ за розділом, і не ховаємо недоперекладене. Помітили неточність у терміні чи реченні: напишіть, виправимо.