Почему обновленный наблюдатель запускается перед созданным наблюдателем?

#laravel

#laravel

Вопрос:

В текущем приложении Laravel я управляю проектами, в которых есть папка для файла.

В проекте store созданный наблюдатель вызывается для создания папки. До сих пор это работает хорошо.

При обновлении проекта мне нравится обновлять имя папки, чтобы оно имело folder_name = project_name .

Но если я использую обоих наблюдателей, обновленный наблюдатель вызывается перед созданным наблюдателем. Чтобы показать это, я реализовал echo функцию.

Контроллер:

     public function store(StoreProjectRequest $request)
    {
        $project = $request->user()->projectsAsCreator()->create($request->all());

        $projectPermission = new ProjectPermissionController();

        $projectPermission->createPermissions('view', $project->id, [$request->user()->id]);

        $projectPermission->createPermissions('edit', $project->id, [$request->user()->id]);

        $projectPermission->createPermissions('admin', $project->id, [$request->user()->id]);

        event(new ProjectCreated($project));

        return response()->json(new ProjectCollectionResource($project));
    }
  

Методы модели

     protected static function booted()
    {
        static::created(function ($project) {
            self::setProjectNumber($project);
            self::createProjectFolder($project);
            self::updateProject($project);
            echo '1';
        });

        static::updated(function ($project) {
            echo '2';
            self::updateFolder($project);
        });
    }

    public static function updateProject($project)
    {
        $project->update([
            'due_date_status'           => self::getDueDateStatus($project),
            'due_date_status_label'     => self::getDueDateStatusLabel($project),
            'issue_labels'              => self::getIssueLabels($project->issues)
        ]);
    }
  

Ответ

 2{
    "message": "Trying to get property 'objectable' of non-object",
    "exception": "ErrorException",
    "file": "/gopanel/sites/7industry_net/public/7app/app/Models/Project/ProjectMethod.php",
    "line": 141,
    "trace": [
        {
            "file": "/gopanel/sites/7industry_net/public/7app/app/Models/Project/ProjectMethod.php",
            "line": 141,
            "function": "handleError",
            "class": "Illuminate\Foundation\Bootstrap\HandleExceptions",
            "type": "->"
        },
  

Как мы можем видеть, в ответе есть только число 2.

Почему первым не является номер один? Это означает, почему созданный наблюдатель не запускается перед обновленным наблюдателем?

Комментарии:

1. 1-й сработает, когда экземпляр модели создаст некоторые данные, а 2-й отправит во время обновления, поэтому одновременно вы не можете получить оба ответа echo

2. эхо-ответ предназначен только для того, чтобы увидеть, какой из них запускается первым. к сожалению, 2. срабатывает первым. Если я прокомментирую self::updateFolder($project); , ответ будет 221

3. что вы делаете в updateProject($project) ?

4. @lagbox: я добавил его

5. что вызывает событие обновления? итак, вы видите 2 для обновления, потому что вы вызываете события обновления, прежде чем повторить 1 в созданном прослушивателе… может быть