Laravel强制删除关系事件

时间:2016-01-22 17:07:37

标签: php laravel laravel-5.2 soft-delete

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

我一直在寻找网络和S.O.对于一些但我发现的所有问题/答案都归结为删除方法,而且在API文档中我还没有找到...

在我的情况下,我有一个注册表模型和一个RegistryDetail模型

注册表

|id|name|surname|....

RegistryDetail表

|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()方法,则不会从数据库中删除相关模型。

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

提前致谢

1 个答案:

答案 0 :(得分:8)

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

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