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 をご覧ください
もう 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 サイトの他の関連記事を参照してください。