首页 > 解决方案 > 当模型在 Laravel 中作为关系删除时,观察者删除不起作用

问题描述

我有 2 个模型:Project > Planning 我有一个 PlanningObserver,当删除 Planning 时,我想在其中删除存储中的文件夹。如果我删除计划本身,它可以正常工作。但是,当我删除删除计划的项目时,该文件夹不会被删除。

规划观察员:

public function deleted(Planning $planning)
    {
        $this->deleteDialuxData($planning);
    }

    private function deleteDialuxData(Planning $planning) {
        $directory_path = $planning->user_id . '/' . $planning->custom_planning_id . '/';
        Storage::disk('dialux')->deleteDirectory($directory_path);
    }

项目控制器:

public function destroy(Project $project)
    {
        if (auth()->user()->id !== $project->user_id) {
            return response()->json(['message' => 'Kein Zugriff'], 403);
        }

        $project->plannings()->delete();

        $project->delete();
        return response()->noContent();

    }

任何想法是什么问题?

标签: laravellaravel-8

解决方案


编辑:

我误读了代码。$project->plannings()->delete()不会触发任何模型事件。如果您想删除所有计划并仍然触发事件,您可以这样做:$project->plannings()->get()->each->delete().

原来的:

您需要注册您的观察员。boot您可以在 的方法上注册它App\Providers\EventServiceProvider

/**
 * Register any events for your application.
 *
 * @return void
 */
public function boot()
{
    User::observe(UserObserver::class);
}

推荐阅读