我编写了下面的代码来从DB和存储中删除文件。问题是只删除db记录并保留存储文件。没有任何错误或任何事情发生。看起来只是跳过了存储代码中的删除。
public function destroy($id)
{
$delete = CompanyDocument::find($id);
$filepath = ('/storage/app/documents/companies/'.$delete->document);
Storage::delete($filepath); //delete from storage
$delete->delete(); //delete from DB
return back();
}
答案 0 :(得分:0)
这是最终的解决方案。
$delete = CompanyDocument::find($id);
Storage::delete('documents/companies'.'/'.$delete->document); //delete from storage
$delete->delete(); //delete from DB
答案 1 :(得分:0)
不是每次都从控制器手动删除存储的文档,而是挂钩Laravel's Model Events。
在CompanyDocument
课程中,您应该覆盖boot
方法并听取删除。
<强> CompanyDocument 强>
class CompanyDocument extends Model {
protected static function boot()
{
parent::boot();
static::deleting(function($deleted) {
Storage::delete("documents/companies/{$deleted->document}");
});
}
}
<强>控制器强>
public function destroy(CompanyDocument $document)
{
$document->delete();
return back();
}