【发布时间】:2017-04-24 15:43:35
【问题描述】:
我正在使用 L5.3.31 并有以下型号:
插件
图片
关系:
// Addon.php
public function images()
{
return $this->hasMany('App\Image');
}
// Image.php
public function addon()
{
return $this->belongsTo('App\Addon');
}
我现在想扩展delete() 方法来删除一些在删除图像对象时保存在文件系统中的图像。据我了解,为了做到这一点,我需要在 Image 模型上扩展 delete() 方法。现在,在我的图像模型上,如果我尝试这样做:
public function delete()
{
dd('triggered');
parent::delete();
}
我预计它会死掉并转储triggered。但是什么也没发生,对象像以前一样被删除。这告诉我上面的代码块在删除时不会被执行,对吧?
我也在 Addon 模型上尝试了同样的事情,同样的结果。最后,我想要完成的是,当我这样做时
$addon->images()->delete(); 我希望 laravel 删除代表每个图像对象的文件。此外,如果我这样做 $addon->images()->where('id', '=', $id)->delete(); 我想删除对象旁边给定 id 的图像文件。
顺便说一句,我不知道这是否重要,但我已将关系设置为级联删除,所以如果我这样做$addon->where('id', '=', $id)->delete();,它也会删除其相关的图像对象。
【问题讨论】:
-
你最好使用listener/observer。