Метод удаления модели Laravel не сработал

#php #laravel #model #eloquent

#php #laravel #Модель #красноречивый

Вопрос:

У меня есть message модель и reaction model. Поэтому, когда я удаляю message все files из реакции, он также должен быть удален.

Но мой delete метод из моего reaction model не выполняется triggered ?

В моей Message модели:

 public function delete()
{
   $this->reactions()->delete();
   return parent::delete();
}
  

В моей Reaction модели:

 public function delete()
{
    $files = $this->files;
    foreach ($files as $file)
    {
        $this->destroyFile($file);
    }

    return parent::delete();
}
  

Поэтому, когда я dd('test'); никогда не достигаю этого метода.

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

1. Возможно ли это для вас сделать это в ваших миграциях, т. Е. есть ли у реакций внешний ключ, который ссылается на идентификатор в сообщениях?

2. @craig_h В моей файловой таблице используются отношения морфинга. Таким образом, он связан только с пользователем (внешний ключ).

3. Хорошо, это объясняет, почему вы не можете использовать каскад. Вы действительно должны размещать свой метод удаления внутри вашего MessagesController, а не вашей модели, и тогда вы сможете выполнить это действие за один раз.

4. Я думал, что это можно сделать в delete методе модели. Затем каждый раз, когда реакция удаляется, все файлы удаляются сразу.

5. Я думаю, что вам нужен, eloquent event который позволяет вам прослушивать события в модели: laravel.com/docs/5.3/eloquent#events