簡體   English   中英

雄辯的觀察員沒有開火

[英]Eloquent Observer not firing

我有兩個模型, ShowEpisode ,具有一對多關系。 我為每個模型都有一個觀察者,以觀察它們何時被刪除並執行一些任務。 如果我的ShowObserver看起來一切正常,並且EpisodeObserver降級,則對於與節目一起刪除的每個EpisodeEpisodeObserver觸發其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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM