Не удаляются картинки с сервера, после удаления фотосета [РЕШЕНО]
Приветствую, опишу одну из причин почему картинки после удаления фотосета, остаются на сервере. Думал будет пара слов, однако получилось достаточно подробно.
При удалении топика, сначала выполняется данная операция
следом если она true, запускается
Вроде бы все правильно, однако, если у вас в базе таблицы типа InnoDB, то как написано в комментах
Написано все правльно, но не полно, удаляется также и запись из таблицы prefix_topic_photo, в которой собственно хранится path на картинку/и, который нужен нам чтоб произвести удаление с сервера. Нет этой записи, соответственно у топика нет картинок, и операция
возвращает пустой миссив.
Решение простое, нужно собрать массив картинок заранее, до DeleteTopic, и передать его в метод DeleteTopicAdditionalData.
Конечно, нужно и в объявление метода добавить дополнительный аргумент
Ну и соответственно, немного переписать само удаление картинок
Все, после этих незначительных изменений, картинки будут удаляться. Удачи!
При удалении топика, сначала выполняется данная операция
$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 комментария