Filament позволяет добавлять вложения к записи, но не удаляет их при удалении записи.
Чтобы решить эту проблему, у нас есть два варианта:
Когда модель собирается быть удалена, она запускает событие удаления. Мы можем прослушать это событие, чтобы активировать функцию, отвечающую за удаление любых вложений до того, как модель перестанет существовать.
Внутри класса модели мы можем добавить загружаемый метод для регистрации новых прослушивателей событий в модели.
class Project extends Model { protected $fillable = [ 'title', 'slug', 'repository', 'description', 'thumbnail', ]; /** * The "booted" method of the model. */ protected static function booted(): void { static::deleting(function ($project) { Storage::disk('public')->delete($project->thumbnail); }); } }
Этот код удалит вложение миниатюры перед удалением модели.
Подробнее об этом можно прочитать в документации Laravel https://laravel.com/docs/11.x/eloquent#events-using-closures
Другой вариант — изменить поведение действия удаления.
protected function getActions(): array { return [ Actions\DeleteAction::make() ->after(function (Project $project) { // delete single if ($project->thumbnail) { Storage::disk('public')->delete($project->thumbnail); } }) ]; }
Вы можете использовать эту опцию, которая лучше соответствует вашим требованиям, но вы должны иметь в виду, что добавление прослушивателя событий приведет к удалению вложения при удалении вашей модели, когда бы оно ни произошло из-за действия Filament или другой части кода в вашем приложении.
Это важно, потому что, вероятно, от этого зависит, какой вариант вам следует выбрать.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3