Kullanıcının Edit.view de sileceği resimleri checkbox ile seçeceği bir kodum var. Başarılı bir şekilde veri tabanında ilgili resimleri siliyor ancak diskten silmiyor. Aşağıda store ve update kodlarımı paylaşıyorum umarım bir çözüm önermenize yeterli olur
public function store(Request $request)
{
// Validation kuralları
$rules = [
'name' => 'required|string|max:255',
'description' => 'required|string',
'price' => 'required|numeric|min:0',
'images.*' => 'image|mimes:jpeg,png,jpg,gif|max:2048', // Her bir resim dosyası için
];
// Hata mesajları
$messages = [
'images.*.image' => 'Lütfen geçerli bir resim dosyası seçin.',
'images.*.mimes' => 'Resim dosyası formatı jpeg, png, jpg veya gif olmalıdır.',
'images.*.max' => 'Resim dosyası boyutu 2MB\'ı geçemez.',
];
// Validation işlemi
$validatedData = $request->validate($rules, $messages);
// Product modeline ait özellikleri al
$data = $request->only(['name', 'description', 'price']);
// Product modelini oluştur ve veritabanına kaydet
$product = Product::create($data);
// Eğer resim dosyaları yüklendi ise
if ($request->hasFile('images')) {
// Resim dosyalarını kaydetmek için ProductImage modelini kullan
foreach ($request->file('images') as $key => $image) {
// Resim dosyasını kaydet ve veritabanına ilişkilendir
$imageName = $data['name'] . '_' . $key . '.' . $image->getClientOriginalExtension();
$imagePath = $image->storeAs('public/images', $imageName);
$product->images()->create(['image_path' => $imagePath, 'image_name' => $imageName]);
}
}
// Diğer işlemler ve yönlendirme
return redirect()
->route('product.index')
->with('success', 'Ürün başarıyla oluşturuldu.');
}`
`public function update(Request $request, string $id)
{
$product = Product::find($id);
// Mevcut resimleri silme
if ($request->has('delete_images')) {
$deletedImages = $request->input('delete_images');
// Veritabanındaki kayıtları sil
ProductImage::whereIn('id', $deletedImages)->delete();
// Diskten dosyaları sil
foreach ($deletedImages as $imageId) {
$image = ProductImage::find($imageId);
if ($image) {
// Dosyayı diskten sil
Storage::delete($image->image_path, true);
}
}
}´
´// Yeni resimleri ekleme veya güncelleme
if ($request->hasFile('images')) {
foreach ($request->file('images') as $key => $image) {
// Resim dosyasını kaydet ve veritabanına ilişkilendir
$imageName = Str::random(10) . '-' . $product->name . '_' . $key . '.' . $image->getClientOriginalExtension();
$imagePath = $image->storeAs('public/images', $imageName);
$product->images()->create(['image_path' => $imagePath, 'image_name' => $imageName]);
}
}
//Diğer ürün bilgilerini güncelleme işlemleri
$product->update($request->all());
return redirect()
->route('product.index')
->with('success', 'Product updated successfully');
}`