2016-12-23 68 views
2

我有4張桌子。其中兩個是單態,其中兩個是多態性Laravel - 如何刪除與belongsTo關係的模型的多態關係?

單形性: 模板,模塊

多態: 文檔,圖像

現在,templatesmodules兼得documentsimages每個Template有許多Module S和modules有外鍵設置爲級聯刪除templates

現在,如果我刪除Template,關聯的Module將被刪除,但關聯的Module的多態關係將保留在數據庫中。我沒有嘗試過任何東西,因爲我完全無能爲力。

當我刪除Template時,我能做些什麼來自動刪除Module的關聯?我認爲這裏的刪除是由數據庫本身處理的,Eloquent與它沒有任何關係。

+0

我只是在銷燬方法中添加一行以刪除想要刪除的任何內容 – lewis4u

+0

@ lewis4u您建議的內容是:首先檢查相關模塊,然後爲每個模塊檢查文檔和圖像並逐個刪除它們。 –

回答

1

因爲它是一個多態關係,級聯刪除不能由外鍵處理。

如果您仍希望在數據庫級別處理刪除操作,則需要編寫某種類型的數據庫觸發器功能。

如果您想要在應用程序級別處理此問題,還有一些選項。

一種方法是更新您的代碼,以便您在任何地方刪除Template時,還要確保刪除它的所有多態關係。

另一種選擇是爲deleting事件創建事件處理程序。每當刪除一個Eloquent模型時,deleting事件就會由Eloquent觸發。在這個刪除事件中,您可以訪問多態關係並刪除它們。

如果deleting事件方法聽起來不錯,有一個包可以爲您實現所有這些,並且可以非常方便地爲您的模型設置:shiftonelabs/laravel-cascade-deletes。充分披露:我寫了包裹。

有了這個包,你只需要添加的CascadesDeletes性狀您Template模型,然後添加一個包含所有關係的數組時Template實例被刪除刪除$cascadeDeletes屬性。