2017-01-06 6 views
2

私には、ShowEpisodeという2つのモデルがあり、1対多数の関係があります。私はObserverを持って、それぞれのモデルが削除されたときに見て、いくつかのタスクを実行するようにしています。私はこのようになります[email protected]()方法に変更した場合、Eloquent Observerが発砲しない

<?php 

/** 
* Listen to the Show deleting event. 
* 
* @param Show $show 
* @return void 
*/ 
public function deleting(Show $show) 
{ 
    if ($show->isForceDeleting()) { 
     foreach ($show->episodes()->onlyTrashed()->get() as $episode) { 
      $episode->forceDelete(); 
     } 
    } else { 
     $show->episodes()->delete(); 
    } 
} 

しかし:このすべてが正常に動作し、カスケードダウンは、EpisodeObserverがショーと一緒に削除され、各Episodeために、そのdeleting()方法を発射するように私のShowObserverに見える場合Episode sがforceDeleted取得んが起動しません:

<?php 

/** 
* Listen to the Show deleting event. 
* 
* @param Show $show 
* @return void 
*/ 
public function deleting(Show $show) 
{ 
    if ($show->isForceDeleting()) { 
     $show->episodes()->onlyTrashed()->forceDelete(); 
    } else { 
     $show->episodes()->delete(); 
    } 
} 

が間違っている程度$show->episodes()->onlyTrashed()->forceDelete();何かがあるのか​​、これは潜在的にバグですか?

答えて

3

(赤い警告ブロック上)のドキュメントをチェックアウト:https://laravel.com/docs/5.3/eloquent#deleting-models

雄弁経由質量DELETE文を実行すると、削除され、削除モデルイベントが削除されたモデルのために解雇されることはありません。これは、deleteステートメントの実行時にモデルが実際には検索されないためです。

これはupdateと同じです。

イベントを発生させる必要がある場合は、イベントを1つずつ削除するか、パフォーマンスが重大な場合はカスタムイベントを発生させるしかありません。

関連する問題