Не удаляются картинки с сервера, после удаления фотосета [РЕШЕНО]

Приветствую, опишу одну из причин почему картинки после удаления фотосета, остаются на сервере. Думал будет пара слов, однако получилось достаточно подробно.


При удалении топика, сначала выполняется данная операция

$this->oMapperTopic->DeleteTopic($sTopicId)


следом если она true, запускается

$this->DeleteTopicAdditionalData($sTopicId)


Вроде бы все правильно, однако, если у вас в базе таблицы типа InnoDB, то как написано в комментах

Если тип таблиц в БД InnoDB, то удалятся всё связи по топику(комменты, голосования, избранное)

Написано все правльно, но не полно, удаляется также и запись из таблицы prefix_topic_photo, в которой собственно хранится path на картинку/и, который нужен нам чтоб произвести удаление с сервера. Нет этой записи, соответственно у топика нет картинок, и операция

$this->getPhotosByTopicId($sTopicId);


возвращает пустой миссив.

Решение простое, нужно собрать массив картинок заранее, до DeleteTopic, и передать его в метод DeleteTopicAdditionalData.

// массив картинок
$aPhotos=$this->getPhotosByTopicId($sTopicId);
// если топик удалился, удаляем связанные данные
if($bResult=$this->oMapperTopic->DeleteTopic($sTopicId)){
    // ну и собственно тут, добавляем в аргументы метода наш массив картинок
    return $this->DeleteTopicAdditionalData($sTopicId, $aPhotos);
}


Конечно, нужно и в объявление метода добавить дополнительный аргумент
public function DeleteTopicAdditionalData($iTopicId, $aPhotos = null) {
...
}


Ну и соответственно, немного переписать само удаление картинок

if ($aPhotos) {
    foreach ($aPhotos as $oPhoto) {
        $this->deleteTopicPhoto($oPhoto);
    }
}


Все, после этих незначительных изменений, картинки будут удаляться. Удачи!

2 комментария

avatar
Спасибо. Будем знать
avatar
Рад помочь)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.