我有点卡在这里,不胜感激:
因此,我有一个包含主题和子主题的表格。每个主题都有许多子主题,我希望能够销毁一个主题,所有子主题都将继续进行。
我使用此控制器执行此操作:
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));
我试图做同样的事情,但它不起作用。我认为问题出在我的查询中,但我无法在此处进行任何操作...
如果我无法解决这个问题,我将阻止删除主题,直到删除所有子主题,但最好删除所有子主题。
谢谢!
答案 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
}
您可以为子主题设置类似的观察者,在其中删除与它们相关的文件,或者在此处进行操作。
答案 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循环以删除其中的每个文件。然后,我运行相同数据的构建器将其删除,然后开始。