ホームページ  >  記事  >  バックエンド開発  >  フィラメント: レコードの削除時に添付ファイルを削除する

フィラメント: レコードの削除時に添付ファイルを削除する

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-16 06:07:02785ブラウズ

Filament: Delete Attachments when Deleting a Record

Filament を使用すると、レコードに添付ファイルを追加できますが、レコードを削除しても添付ファイルは削除されません。

この問題を解決するには、2 つの選択肢があります:

モデルの削除イベントを聞く

モデルが削除されようとすると、削除イベントが発生します。このイベントをリッスンして、モデルが存在しなくなる前に添付ファイルを削除する機能をトリガーできます。

モデル クラス内に、ブートされたメソッドを追加して、新しいイベント リスナーをモデルに登録できます。

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 の削除アクションを変更する

もう 1 つのオプションは、削除アクションの動作を変更することです。

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

このオプションは要件に合わせて使用​​できますが、イベント リスナーを追加すると、フィラメント アクションやアプリ内のコードの別の部分によって発生したとき、モデルが削除されたときに添付ファイルも削除されることに注意してください。

これは、選択すべきオプションを決定する可能性があるため、重要です。

以上がフィラメント: レコードの削除時に添付ファイルを削除するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。