Работает только одна функция либо Удалить из БД, либо Удалить с сервера

Я пытаюсь удалить изображения поста, но выполняется только одно действие, которое я поставил первым. Либо Удалить из БД, либо Удалить из папки/сервера.

Оба действия работают нормально, но только одно, которое я поставил на первое место.

Примечание. Я вызываю эту функцию контроллера через Ajax Get Request from Blade/View.

public function deletePermanently(){
    $id = Input::get('id');
    Photo::where('post_id',$id)->delete();
    $obj = Post::with(['pictures'])->find($id);
    $filePath = public_path().'/upload/';
    if (count($obj->pictures) > 0){
        foreach($obj->pictures as $photo){
            if (file_exists($filePath.$photo->name)){                                       
                unlink($filePath.$photo->name);                    
            }

        }
    }
}

Я ожидаю одновременного удаления как из БД, так и из папки/сервера

Поскольку здесь выполняется действие удаления Photo::where('post_id',$id)->delete();, это означает, что этого id больше нет в базе данных

Zain Farooq 27.04.2019 11:59

Абсолютно верно это моя ошибка

Zeeshan DaDa 27.04.2019 12:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
22
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы должны удалить изображение, а затем удалить запись. Если вы удалите запись, вы не сможете снова найти запись, чтобы удалить изображение. Итак, сделайте что-то вроде этого:

public function deletePermanently(){
    $id = Input::get('id');
    $obj = Post::with(['pictures'])->find($id);
    $filePath = public_path().'/upload/';
    if (count($obj->pictures) > 0){
        foreach($obj->pictures as $photo){
            if (file_exists($filePath.$photo->name)){                                       
                unlink($filePath.$photo->name);                    
            }

        }
    }
    Photo::where('post_id',$id)->delete();
}
Ответ принят как подходящий

Вы удаляли изображения в базе данных, не делая снимки, которые я сделал pictures до выполнения действия удаления.

 Photo::where('post_id',$id)->delete();
 $obj = Post::with(['pictures'])->find($id);

Я поменял порядок этих строк

 $obj = Post::with(['pictures'])->find($id);
 Photo::where('post_id',$id)->delete();

Ваш окончательный код должен выглядеть так

public function deletePermanently(){
$id = Input::get('id');
$obj = Post::with(['pictures'])->find($id);
Photo::where('post_id',$id)->delete();
$filePath = public_path().'/upload/';
if (count($obj->pictures) > 0){
    foreach($obj->pictures as $photo){
        if (file_exists($filePath.$photo->name)){                                       
            unlink($filePath.$photo->name);                    
        }

    }
  }
}

вы можете попробовать вот так

use Illuminate\Support\Facades\Storage;

Storage::delete('file.jpg');

Другие вопросы по теме

Похожие вопросы

Сохраните сумму всех настраиваемых полей определенного элемента заказа в качестве метаданных заказа в WooCommerce
MySQL - выберите столбец «Имя» в соответствии с выбором пользователя. Где строки в столбце «id» и «родительский» равны друг другу
Обновите таблицу учетных записей с помощью пользовательских настроек в PHP
Найти адрес по почтовому индексу и редактировать форму ввода без перезагрузки страницы
Налоги на доставку Woocommerce и неверные общие расчеты
Динамическое отображение цены продажи для определенных продуктов в Woocommerce
Установите/снимите флажок со всех флажков, установите только 1 флажок, но верните все остальные значения флажка
Сохранить сумму пользовательских полей элемента заказа WooCommerce как новые метаданные
Как добавить слайдер изображений в пользовательскую тему WordPress с помощью WordPress Customizer API
Как подсчитать общее количество с помощью контроллера и вернуться к просмотру