"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 필라멘트: 기록 삭제 시 첨부 파일 삭제

필라멘트: 기록 삭제 시 첨부 파일 삭제

2024-11-08에 게시됨
검색:587

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);
                }
            })
    ];
}

요구 사항에 더 잘 맞는 옵션을 사용할 수 있지만 이벤트 리스너를 추가하면 앱의 필라멘트 작업이나 다른 코드 부분에 의해 모델이 삭제될 때 첨부 파일이 삭제된다는 점을 명심해야 합니다.

옵션을 선택해야 할 때마다 결정되기 때문에 이는 중요합니다.

릴리스 선언문 이 글은 https://dev.to/sertxudev/filment-delete-attachments-when-deleting-a-record-1jhl?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]에 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3