[英]Eloquent Observer not firing
我有兩個模型, Show
和Episode
,具有一對多關系。 我為每個模型都有一個觀察者,以觀察它們何時被刪除並執行一些任務。 如果我的ShowObserver
看起來一切正常,並且EpisodeObserver
降級,則對於與節目一起刪除的每個Episode
, EpisodeObserver
觸發其EpisodeObserver
deleting()
方法:
<?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@deleting()
即使Episode
確實獲得了forceDeleted,也不會觸發EpisodeObserver@deleting()
方法:
<?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();
那是不正確的,還是潛在的錯誤?
查閱文檔(在紅色警告框上): https : //laravel.com/docs/5.3/eloquent#deleting-models
通過Eloquent執行批量刪除語句時,將不會為已刪除的模型觸發Delete和Deleted模型事件。 這是因為在執行delete語句時,從未真正檢索過模型。
update
通話也是如此。
因此,如果您需要觸發事件,則別無選擇,只能將其逐個刪除;如果性能至關重要,則可以觸發自己的自定義事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.