2017-04-24 102 views
0

删除()我使用L5.3.31并有以下型号:Laravel 5:扩展型号

附加组件

图片

关系:

// 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();它也删除其相关的图像对象。

+0

你最好使用[listener/observer](https://laravel.com/docs/5.4/eloquent#observers)。 – Samsquanch

回答

3

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

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

第一个是查询生成器级别之间的差异(这不会触发模型上的删除/删除事件)

第二个是在模型级别(这确实触发删除/删除甚至ts型号为 )。 支票上的事件本文档中laravel 5.4

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

您可以添加观察者捕捉到删除事件并做你想做 ,什么那里有一个问题,打开和关闭上laravel同样的事情 https://github.com/laravel/framework/issues/2536

+0

谢谢,我现在明白了。 –