سلام وقت بخیر
من یک قسمتی رو ایجاد کردم که داخل اون دوره های آموزشی قرار بدم و برای تصاویر هم از پکیج
composer require intervention/image
استفاده کردم و الان تصاویر من در پایگاه داده به این صورت ذخیره میشه
{"images":{"original":"upload\/images\/2020\/9\/1599161237.elearning-bg.png","300":"upload\/images\/2020\/9\/300_1599161237.elearning-bg.png","600":"upload\/images\/2020\/9\/600_1599161237.elearning-bg.png","900":"upload\/images\/2020\/9\/900_1599161237.elearning-bg.png"},"thumb":"upload\/images\/2020\/9\/300_1599161237.elearning-bg.png"}
تا اینجا مشکلی نیست تصاویر با سایز هایی که مشخص کردم ذخیره میشه
اما الان وقتی دوره رو پاک می کنم تصاویر از داخل پوشه آپلود پاک نمیشه
اومدم و از unlink میخواستم استفاده کنم ولی نشد
چه راهکاری میتونید بگید که فایل تصاویر بعد از پاک شدن دوره اون ها هم پاک بشه
اینم قسمت Controller
/**
* Remove the specified resource from storage.
*
* @param Course $course
* @return Application|RedirectResponse|Redirector
*/
public function destroy(Course $course)
{
$course->delete();
return redirect(route('admin.courses.index'));
}
}
سلام ابتدا باید ببینید شما تصاویر رو در کدوم مسیر آپلود کردین اگر در مسیر storage آپلود کردین از فساد storage و متد delete برای حذف استفاده نمایید , اگر در مسیر public ذخیره کردین از فساد File و متد delete برای حذف استفاده کنید داخل کنترلرتون بعد از حذف course تصاویرو حذف کنید.
من تصاویر رو در پوشه
Public/upload/images
آپلود کردم که البته بعد از این قسمت دو پوشه دیگه هم داره که بصورت خودکار ساخته میشه به نامهای
Year/month
بعد فایل مورد نظر
آدرس کامل به اینصورت هست
مثلا
Public/upload/images/2020/9/
و اسم فایل
من به صورت نوشتم نشد
$ImageFile = $course->images;
File::delete($ImageFile);
$course->delete();
یا
File::delete($course->images);
$course->delete();
@mani.h1990 سلام.
روش شما درسته اما روش پاس دادن اطلاعاتتون به متد Delete مشکل داره . متد delete سه حالت مختلف میتونه داشته باشه :
حذف یک تک فایل:
File::delete($filename);
حذف چند فایل:
File::delete($file1 , $file2 , $file3);
حذف آرایه ای از فایل ها:
$files = [$file1, $file2];
File::delete($files);
عملا اینجا شما دارین از روش سوم استفاده میکنید اما ساختار آرایه شما مشکل داره . باید آرایه رو جوری پاس بدید که هر پارامتر آدرسی از یک فایل هست . شما آرایه تو در تو دارین و این مشکل سازه . باید آرایه رو به این صورت تبدیل کنید(در واقع هر عنصر آرایه یک آدرس از فایل برای حذف شدن) :
$filesAddresses = [
"upload\/images\/2020\/9\/1599161237.elearning-bg.png",
"upload\/images\/2020\/9\/300_1599161237.elearning-bg.png",
"upload\/images\/2020\/9\/600_1599161237.elearning-bg.png",
"upload\/images\/2020\/9\/900_1599161237.elearning-bg.png"
];
یا اینکه با توجه به ساختاری که از دیتابیستون میگیرید ( ممکنه serialize کنید یا هر مدل دیگه ای ) میتونید حلقه بزنید و داخل حلقه foreach تک تک فایل ها رو حذف کنید.
امیدوارم کمک کننده باشه . موفق باشید
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟