Laravel 强制删除关系事件

Laravel force delete event on relations

我正在使用 Laravel 5.2 开发 Laravel 网络应用程序。我的问题很简单......我如何收听 forceDelete 事件以强制删除模型关系?

我一直在网上浏览 S.O。对于少数但所有 questions/answers 我发现与 delete 方法有关的地方,而且在 API 文档中我还没有找到太多...

在我的例子中,我有一个 Registry 模型和一个 RegistryDetail 模型

注册表table

|id|name|surname|....

注册表详细信息table

|id|id_registry|....

我已经为这两个 boot 函数创建了:

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

    static::deleted(function($registry) {
        // Delete registry_detail
        $registry->registryDetail->delete();
    });

    static::restored(function($registry) {
        // Restore registry_detail
        $registry->registrydetail()->withTrashed()->restore();
    });
}

由于两个模型都有 SoftDeletes,因此仅当调用 delete() 方法时才会调用 static::deleted 函数。如果我调用 forceDelete() 方法,相关模型不会从数据库中删除。

如果您需要更多信息,请告诉我。

提前致谢

调用 forceDelete() 时,deleted 事件仍应触发。在 deleted() 事件方法中,您可以通过 isForceDeleting() 检查 forceDeleting protected 属性 以查看您是处于常规删除还是强制删除。

static::deleted(function($registry) {
    // Delete registry_detail
    if ($registry->isForceDeleting()) {
        $registry->registryDetail->forceDelete();
    } else {
        $registry->registryDetail->delete();
    }
});