「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > フィラメント: レコードの削除時に添付ファイルを削除する

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

2024 年 11 月 8 日に公開
ブラウズ:919

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

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

これは重要です。なぜなら、選択すべきオプションが常に決定されるからです。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/sertxudev/filament-delete-attachments-when-deleting-a-record-1jhl?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3