Laravel 5:在模型上扩展delete()

Art*_*ach 1 model laravel eloquent

我正在使用L5.3.31并具有以下型号:

添加在

图片

关系:

// Addon.php
public function images()
{
    return $this->hasMany('App\Image');
}

// Image.php
public function addon()
{
    return $this->belongsTo('App\Addon');
}
Run Code Online (Sandbox Code Playgroud)

我现在想要扩展该delete()方法以删除在删除图像对象时保存在文件系统上的一些图像.据我所知,为了做到这一点,我需要delete()在Image模型上扩展该方法.现在,在我的图像模型上,如果我尝试这样做:

public function delete()
{
    dd('triggered');
    parent::delete();
}
Run Code Online (Sandbox Code Playgroud)

我希望它能够死掉triggered.但没有任何反应,对象就像以前一样被删除了.这告诉我上面的代码块在删除时没有被执行,对吧?

我也在Addon模型上尝试了同样的事情,结果相同.最后,当我这样做时,我想要完成的是这个

$addon->images()->delete();我想laravel删除代表每个图像对象的文件.另外,如果我这样做,$addon->images()->where('id', '=', $id)->delete();我想删除对象旁边的给定id的图像文件.

顺便说一句,我不知道这是否重要,但是我已经将关系设置为在级联上删除,所以如果我这样做$addon->where('id', '=', $id)->delete();也会删除其相关的图像对象.

小智 6

两者之间有区别

$addon->images()->where('id', '=', $id)->delete();

$addon->images()->find(11)->delete();

第一个是在查询构建器级别(这不会触发模型上的删除/删除事件).

第二个是模型级别(这确实触发了模型上的删除/删除事件).请查看Laravel 5.4中有关事件的文档

https://laravel.com/docs/5.4/eloquent#events

您可以添加观察者来捕获删除事件并执行您想要的操作,并且在Laravel上打开和关闭的问题是关于同样的事情 https://github.com/laravel/framework/issues/2536