【问题标题】:How to delete image from folder in Laravel for parent and child case如何从 Laravel 中的文件夹中删除父子案例中的图像
【发布时间】:2020-09-07 14:17:33
【问题描述】:

我创建了两个数据库,一个是父数据库,另一个是子数据库。父表包含标题和描述列,子表包含父行的图像列。现在我想从父表中删除一行,并从它存储到的文件夹中删除图像。

我已经完成了:-

要从数据库中删除的代码, 从子表中删除并从保存图像的文件夹中删除图像的代码, 从父表中删除行的代码。

我做不到:-

删除父行时从保存图像的文件夹中删除的代码。

我的控制器是这样的[

ProjectControllers 控制我的父表 ProjectImageControllers 控制我的子表

//This is my ProjectControllers.php 

public function destroy(Project $project)
    {
        $projectImage = Project::find(request('id'));
        $deleted = $projectImage->delete();
        if($deleted){
            File::delete(public_path('/images/projects/').$projectImage->image);
        }

        $projectList = Project::all();
        return view('admin.project.adminProject', ['success'=> true, 'projectList' => $projectList ]);
    }

]

模型关系如下[

这是 Project.php 模型


class Project extends Model
{
    public function projectImages(){

        return $this->hasMany(ProjectImages::class);
    }
}


这是 ProjectImages.php 模型


class ProjectImages extends Model
{
    protected $fillable = [
        'image', 'project_id'
    ];
    public function project(){
        return $this->belongsTo(Project::class, 'project_id');
    }
}

]

【问题讨论】:

  • 可能是权限问题尝试使用unlink() 而不是File::delete()dd() 结果,这样您就可以看到哪里出了问题。 dd(unlink(public_path('/images/projects/').$projectImage->image));
  • 您是否在删除模型实体之前尝试取消链接图像?
  • 不,它不工作。也许我们需要使用循环从文件中一一删除。如果在数据库中找不到,那么也从文件中删除.. 或者其他任何东西.. 我对编码很陌生,你能帮我解决循环概念吗?

标签: laravel eloquent


【解决方案1】:

请先获取子表的行,然后将文件夹中的图片一一删除,如下:

public function destroy(Project $project)
{
   //first find the Parent object with the help of the id parameter.         
     $project = Project::find(request('id'));

   //find the children list of the parent
     $projectImages = ProjectImages::where('project_id','=',request('id'));

    //delete the images stored in your filesystem one by one 
     foreach($projectImages as $projectImage){

          File::delete(public_path('/images/projects/').$projectImage->image);

     }
    
    //Now,finally delete the parent table data. 
     $project->delete();
    

    $projectList = Project::all();
    
    return view('admin.project.adminProject', ['success'=> true, 'projectList' => $projectList ]);
}

 

【讨论】:

    猜你喜欢
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多