«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Нить: удаление вложений при удалении записи

Нить: удаление вложений при удалении записи

Опубликовано 8 ноября 2024 г.
Просматривать:521

Filament: Delete Attachments when Deleting a Record

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

Измените действие удаления Filament.

Другой вариант — изменить поведение действия удаления.

protected function getActions(): array
{
    return [
        Actions\DeleteAction::make()
            ->after(function (Project $project) {
                // delete single
                if ($project->thumbnail) {
                    Storage::disk('public')->delete($project->thumbnail);
                }
            })
    ];
}

Вы можете использовать эту опцию, которая лучше соответствует вашим требованиям, но вы должны иметь в виду, что добавление прослушивателя событий приведет к удалению вложения при удалении вашей модели, когда бы оно ни произошло из-за действия Filament или другой части кода в вашем приложении.

Это важно, потому что, вероятно, от этого зависит, какой вариант вам следует выбрать.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/sertxudev/filament-delete-attachments-when-deleting-a-record-1jhl?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3