Я пытаюсь удалить изображения поста, но выполняется только одно действие, которое я поставил первым. Либо Удалить из БД, либо Удалить из папки/сервера.
Оба действия работают нормально, но только одно, которое я поставил на первое место.
Примечание. Я вызываю эту функцию контроллера через 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);
}
}
}
}
Я ожидаю одновременного удаления как из БД, так и из папки/сервера
Абсолютно верно это моя ошибка






Вы должны удалить изображение, а затем удалить запись. Если вы удалите запись, вы не сможете снова найти запись, чтобы удалить изображение. Итак, сделайте что-то вроде этого:
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');
Поскольку здесь выполняется действие удаления
Photo::where('post_id',$id)->delete();, это означает, что этогоidбольше нет в базе данных