public function update(Post $post, array $data): void
{
try {
$image = $post->image;
if ($image) {
$this->storage->delete($image);
}
$tag_id = $data['tag_id'];
unset($data['tag_id']);
$this->db->beginTransaction();
$post->update($data);
$post->tags()->sync($tag_id);
$this->db->commit();
} catch (\Exception $e) {
$this->db->rollBack();
throw new DbException("Ошибка обновления поста: {$e->getMessage()}");
}
}
public function delete(Post $post): void
{
try {
$image = $post->image;
if ($image) {
$this->storage->delete($image);
}
$this->db->beginTransaction();
$post->tags()->detach();
$post->category()->dissociate();
$post->delete();
$this->db->commit();
} catch (\Exception $e) {
$this->db->rollBack();
throw new DbException("Ошибка удаления поста: {$e->getMessage()}");
}
}
Есть класс PostQueries. Я просто запросы убрал в отдельный класс. В обоих методах есть код с удалением картинок (превью к посту), и он одинаковый. Как избавиться от дублирования? При удалении самого поста, надо удалить картинку. При обновлении - удалить старую (если она есть), поставить новую. Новая вставляется в $data.