【问题标题】:Deleting multiple files删除多个文件
【发布时间】:2019-01-24 16:55:17
【问题描述】:

我有点卡在这里,任何帮助表示赞赏:

所以我有一个包含主题的表格,然后是子主题。每个主题都有很多子主题,我希望能够破坏一个主题,所有子主题都可以。

我用这个控制器做了这个:

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));

我已经尝试过这样做,但它不起作用。我认为问题出在我的查询上,但我无法在这里完成我必须做的事情......

如果我不能解决这个问题,我会阻止删除主题,直到所有子主题都被删除,但最好全部删除。

提前致谢!

【问题讨论】:

  • 你能进一步解释为什么你不能使用unlink电话吗?

标签: php mysql laravel file


【解决方案1】:

在您的 Theme 模型上使用 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

【讨论】:

    【解决方案2】:

    我想通了。我知道我可能没有以正确的方式提出问题,所以还是感谢您的帮助!

    问题是我试图删除几个文件,而我的取消链接代码显然没有期待一个集合或构建器。我让它像这样工作:

    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 循环来删除其中的每个文件。然后我运行相同数据的构建器来删除它,然后我们就走了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 1970-01-01
      • 2010-09-15
      • 2021-12-28
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多