Работает только одна функция: либо Удалить из БД, либо Удалить с Сервера. - PullRequest
1 голос
/ 27 апреля 2019

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

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

Примечание: я вызываю эту функцию контроллера через Ajax Get Request от 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);                    
            }

        }
    }
}

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

Ответы [ 3 ]

0 голосов
/ 27 апреля 2019

Вы удаляли изображения в базе данных, не делая снимки. Я сделал 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);                    
        }

    }
  }
}
0 голосов
/ 27 апреля 2019

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

use Illuminate\Support\Facades\Storage;

Storage::delete('file.jpg');
0 голосов
/ 27 апреля 2019

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

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();
}
...