🔥جمعه سیاه در راکت با (( ۷۰ درصد )) تخفیف! این فرصت دیگه تکرار نمیشه
مشاهده دورههاسلام وقت بخیر
من یک قسمتی رو ایجاد کردم که داخل اون دوره های آموزشی قرار بدم و برای تصاویر هم از پکیج
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 تک تک فایل ها رو حذف کنید.
امیدوارم کمک کننده باشه . موفق باشید
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟