2016-01-22 99 views
0

我正在使用Laravel 5.2開發Laravel Web應用程序。我的問題很簡單...我如何聆聽forceDelete事件以強制刪除模型關係?Laravel強制刪除關係事件

我一直在環顧網絡和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(); 
    }); 
} 

由於這兩種型號有SoftDeletesstatic::deleted函數被調用,只有當delete()方法被調用。如果我調用forceDelete()方法,相關模型將不會從數據庫中刪除。

如果您需要更多信息,請告訴我。

在此先感謝

+0

你可以改變外部關係做級聯刪除刪除。 – naneri

+0

我不想改變我的數據庫結構...我更喜歡軟件解決方案,如下面的答案 – IlGala

回答

3

調用forceDelete()deleted事件應該還是火。在deleted()事件方法中,您可以通過isForceDeleting()檢查forceDeleting受保護的屬性,以查看您是否正在進行常規刪除或強制刪除。

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

謝謝@patricus,這個解決方案解決了我的問題,這正是我一直在尋找的 – IlGala