【问题标题】:Laravel 5: Extend delete() on modelLaravel 5:在模型上扩展 delete()
【发布时间】: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();,它也会删除其相关的图像对象。

【问题讨论】:

标签: laravel model eloquent


【解决方案1】:

有区别

$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

【讨论】:

  • 谢谢,我明白了。
  • 欢迎@ArtemiosAntonioBalbach
猜你喜欢
  • 1970-01-01
  • 2020-06-19
  • 2013-05-10
  • 2016-04-01
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多