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