dpsx99068 2017-01-06 08:04
浏览 106
已采纳

Eloquent Observer没有开火

I have two models, Show and Episode, with a one to many relationship. I have an Observer for each model to watch when they are deleted and do some tasks. If my ShowObserver looks like this everything works properly and cascades down, the EpisodeObserver fires its deleting() method for each Episode that is deleted along with the show:

<?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();
    }
}

However, if I change it to looks like this the EpisodeObserver@deleting() methods never fire even though the Episodes do get 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();
    }
}

Is there something about $show->episodes()->onlyTrashed()->forceDelete(); that is incorrect, or is this potentially a bug?

  • 写回答

1条回答 默认 最新

  • dorv56831 2017-01-06 09:03
    关注

    Check out the documentation (on the red warning block): https://laravel.com/docs/5.3/eloquent#deleting-models

    When executing a mass delete statement via Eloquent, the deleting and deleted model events will not be fired for the deleted models. This is because the models are never actually retrieved when executing the delete statement.

    This is also same to update call.

    So if you need to fire the events, you have no choice but to delete it one by one, or fire your own custom event if performance is critical.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件