سلام اقای صالحی در این ویدیوی حذف کردن محصولات شما فقط دیتا رو از دیتابیس حذف نمودید و فایلها رو حذف نکردید
من برای حذف فایلها از File::deleteDirectory استفاده کردم .
سلام.
بله درسته.
البته بهتره یک transaction بذارید ابتدا از دیتابیس حذف کنید و بعد فایل مورد نظرو از روی هارد پاک کنید. اگر همه چی موفق بود comit کنید وگرنه roleback بزنید.
بهترین پاسخ
محسن موحد۱۳ دی ۱۴۰۰، ۱۰:۲۳
استفاده از transaction
use Illuminate\Support\Facades\DB;
متودها:
public function delete($product_id)
{
DB::beginTransaction();
try {
$product = Product::findOrFail($product_id);
$product->delete();
$this->deleteDirectories($product_id);
DB::commit();
return back()->with('success', 'محصول با موفقیت حذف شد');
} catch (\Exception $e) {
DB::rollBack();
return back()->with('failed', 'خطا: محصول حذف نشد');
}
}
private function deleteDirectories($product_id)
{
$productPath = public_path('products/' . $product_id);
$storagePath = storage_path('app/local_storage/products/' . $product_id);
// Delete directories if they exist
if (File::exists($productPath)) {
File::deleteDirectory($productPath);
}
if (File::exists($storagePath)) {
File::deleteDirectory($storagePath);
}
}