在forceDelete上删除模型的文件附件-OctoberCMS

问题描述

我有一个带有很多附件并启用了软删除的模型:

public $attachMany = [
    'gallery' => 'System\Models\File',];

如果我将softDelete => true添加到上面的'gallery'数组中,则在软删除后它将从磁盘上删除图库图像,但是我只想在永久删除磁盘后才从磁盘上删除图像附件删除模型({{1)}。

在软删除之后,模型的事件forceDelete()似乎也被触发,因此似乎我也不能使用它。

仅当我强制删除模型时,如何才能从磁盘上删除图库图像?

添加

由于某种原因,这不会删除图像或图像记录:

afterDelete()

解决方法

这里的问题是System\Models\File模型没有SoftDelete traitdeleted_at field,因此不会像其他模型一样。

目前,您需要手动管理这种关系。

你能做什么?

  1. 只是请勿添加任何类型的选项softDelete => truedelete => true
  2. 当您soft delete的主要模型比预期的所有相关gallery filesnot be deleted达到预期的状态时,并且在还原主要模型时,所有gallery files都会在那里。
  3. li>
  4. 现在,当您执行forceDelete()时,您需要在主模型中添加如下所示的其他代码来actually delete那些关系。
<?PHP

//... your model

public $attachMany = [
    'gallery' => 'System\Models\File',];

public function afterDelete() {
    // it will ensure that your file model is deleted. 
    // once parent model is actually deleted
    foreach ($this->gallery as $gallery) {
        $gallery->delete();
    }
}

//.. your model

参考:https://octobercms.com/forum/post/deleting-attachments-when-deleting-model

如果有任何疑问,请发表评论。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...