即使模型已经(软)删除,Laravel也会触发已删除的事件

时间:2017-06-20 06:54:54

标签: laravel laravel-5 laravel-5.4

当删除允许软删除的模型时,我尝试执行一些额外的清理代码。

我已经迷上了"删除了"事件执行此清理代码如下:

protected static function boot()
{
    parent::boot();

    static::deleted( function ($mymodel) { <cleanup code here> } );
}

但是我发现如果在已删除的模型上调用delete,则会再次触发delete事件。我希望在框架中检查可以防止这种情况,但它似乎不适合软删除的模型?

编辑:我并不想讨论是否应该/不应该再次触发删除事件。我想对此会有各种各样的意见。事实上它现在确实如此,而我的要求是它没有,所以它更多地是关于我如何有力地实施支票的下一部分,我需要一些帮助:

如果我必须为此实现自己的检查,是否可以安全地覆盖模型上的删除方法 - 还是有其他方法可以删除模型?我对这一点的关注是为什么我在第一时间监听已删除事件以运行清理代码 - 而不是覆盖delete方法并在调用parent :: delete()之后放置我的清理代码,因为我认为应该调用删除事件,无论模型的删除是如何启动的(如果确实存在多种方式?)。

1 个答案:

答案 0 :(得分:0)

允许类中某个方法的责任依赖于允许的触发器,因此不应在视图中启用此类机制。

记录的“已删除”状态本身定义了代码/视图不会将对象暴露给“删除”消息,除非它具有允许在域中使用的另一个行为/规则。这是你定义对象域的规则,所以你要决定它何时发生。

例如,软删除可能允许第二次删除调用以硬删除记录,例如,因此FW不应限制呼叫。