Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
я не понимаю, как мне удалить картинки, которые создались до ошибки в transaction? они в бд дропаются, но не удаляются в storage (в дальнейшем будет использоваться s3, если это играет роль)
public function store(LessonStoreRequest $request, Course $course)
{
try {
// Начинаем транзакцию
DB::beginTransaction();
// Транзакция для создания урока и блоков
$lesson = DB::transaction(function () use ($request, $course) {
// Вызов метода сервиса для создания урока с блоками
$lesson = $this->service->createLessonWithBlocks($course, $request->title, $request->blocks);
// Обработка медиафайлов
foreach ($lesson->blocks as $block) {
if (is_array($block->params)) {
$this->service->handleMedia($block, $block->params);
}
}
return $lesson;
});
// Фиксация транзакции
DB::commit();
return new LessonWithBlocksResource($lesson);
} catch (\Exception $e) {
// здесь нужно удалить картинки
// Откатываем транзакцию в случае ошибки
DB::rollBack();
abort(400, "Не удалось создать урок: $e");
} catch (\Throwable $t) {
// здесь нужно удалить картинки
// Откатываем транзакцию в случае критической ошибки
DB::rollBack();
abort(500, "Не удалось создать урок: $t");
}
}
Не в сети
здесь не видно как вы их помещаете в сторадж. очевидно что удаление должно быть реализовано как-то подобно добавлению, вероятно в том же сервисном классе.
Throwable является предком Exception поэтому у вас тут очевидное дублирование.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети