#php #laravel #laravel-7
#php #laravel #laravel-7
Вопрос:
Я пытаюсь удалить несколько изображений с помощью product_id, я могу удалять по одному изображению за раз, но выясняю, как я могу вставить переменную типа $ i = 0 в цикл, но это не работает в laravel. пока это мой код
public function ImageDelete($slider_id)
{
//int $i=0; Had introduced this but doesn't work
$slider = Products::findOrFail($slider_id);
foreach($slider as $product){
$product_images=$slider->images()->get();
$image_path = public_path().'images2\'.$product_images[0]->filename;
File::delete($image_path);
//$i ;
}
$slider->delete();
return response()->json(['success'=>'Pics deleted successfully!']);
}
Комментарии:
1. Привет, дорогой друг. попробуйте
$slider = Products::where('id',$slider_id)->get();
, если у вас есть несколько записей с одинаковым значениемid
.2. @Mohammad Спасибо, что изображения находятся в папке, у одного продукта может быть несколько изображений, поэтому моя проблема заключается в удалении всех изображений этого продукта на его пути.
3. Вы пробовали
foreach
$product_images
? Потому что у вас есть несколько изображений для одного продукта. используйтеforeach
on$product_images
и измените$image_path
следующим образом:$image_path = public_path().'images2\'.$product_image->filename;
4. @MohammadAliyari, если я попытаюсь это сделать, я получу ошибку Undefined переменная: product_images но когда я ввожу цикл foreach и добавляю $product_images[0]->filename, это работает, но удаляет только одно изображение
Ответ №1:
findOrFail
Метод возвращает только один элемент. Таким образом, вы не можете выполнить итерацию по нему.
Вы можете использовать each
метод
$product = Products::findOrFail($id);
$images = $product->images()->get();
$images->each(function ($file, $key) {
$filePath = public_path("images2/") . $file->filename;
File::delete($filePath);
});
// Delete the product
$product->delete();
Комментарии:
1. Спасибо, но как реализовать эту часть ($value, $ key)
2. Я обновил свой ответ. Пожалуйста, ознакомьтесь с документацией Laravel относительно сбора и их методов.
Ответ №2:
Попробуйте это:
public function ImageDelete($slider_id)
{
$product = Products::find($slider_id);
$product_images=$product->images()->get();
foreach($product_images as $product_image){
$image_path = public_path().'images2\'.$product_image->filename;
File::delete($image_path);
}
$product->delete();
return response()->json(['success'=>'Pics deleted successfully!']);
}