删除多个文件

时间:2019-01-24 16:55:18

标签: php mysql laravel file

我有点卡在这里,不胜感激:

因此,我有一个包含主题和子主题的表格。每个主题都有许多子主题,我希望能够销毁一个主题,所有子主题都将继续进行。

我使用此控制器执行此操作:

public function destroy()
{
     $comtheme = Theme::findOrFail(request('idDelTCom'));
     $comtheme->delete();
     $comfiles = Subtheme::where('comtheme_id', '=', request('idDelTCom'));
     $comfiles->delete();

     return back();
}

正在工作。我的问题如下:

每个子主题都有关联的文件。删除单个子主题时,可以使用以下方法删除文件:

unlink(storage_path('app/public/com/checklists/'.$file));

我试图做同样的事情,但它不起作用。我认为问题出在我的查询中,但我无法在此处进行任何操作...

如果我无法解决这个问题,我将阻止删除主题,直到删除所有子主题,但最好删除所有子主题。

谢谢!

2 个答案:

答案 0 :(得分:0)

在主题模型上使用on观察器。有很多方法可以实现,但是我更喜欢在模型类本身中声明它,因此在主题模型的类中可以这样:

protected static function boot()
{
    parent::boot();
    static::observe(ThemeObserver::class);
}

当然会有一条use语句指向您的ThemeObserver类,将其放置在项目中您想要的任何位置,并带有模型或专用的观察者目录。

ThemeObserver类中,您需要一个deleting的事件,如下所示:

public function deleting(Theme $theme)
{
    // delete subthemes here
}

您可以为子主题设置类似的观察者,在其中删除与它们相关的文件,或者在此处进行操作。

https://laravel.com/docs/5.7/eloquent#observers

答案 1 :(得分:0)

我知道了。我知道我可能没有以正确的方式提出问题,所以无论如何都要感谢您的帮助!

问题是我正试图删除多个文件,而我的取消链接代码显然并没有期望产生任何破坏或生成器。我让它像这样工作:

public function destroy()
    {

        $comfiles= Comfile::where('comtheme_id', '=', request('idDelTCom'))->get();

        foreach($comfiles as $comfile){
            $file = $comfile->file_name;

            unlink(storage_path('app/public/com/checklists/'.$file));
        }

        $comfileDel = Comfile::where('comtheme_id', '=', request('idDelTCom'));

        $comfileDel->delete();

        $comtheme= Comtheme::findOrFail(request('idDelTCom'));

        $comtheme->delete();

        return back();

    }

因此,我得到了要删除的数据的集合,运行一个foreach循环以删除其中的每个文件。然后,我运行相同数据的构建器将其删除,然后开始。