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); } }) ]; }
このオプションを使用すると、要件に合わせて使用できますが、イベント リスナーを追加すると、フィラメント アクションやアプリ内のコードの別の部分によって発生したとき、モデルが削除されたときに添付ファイルも削除されることに注意してください。
これは重要です。なぜなら、選択すべきオプションが常に決定されるからです。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3