#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