سید مهدی حسینی
4 سال پیش توسط سید مهدی حسینی مطرح شد
8 پاسخ

حذف تصاویر هنگام حذف یک محصول

سلام دوستان
یه سوال ایا روشی وجود داره که هنگامی که یه محصول حذف شد تصاویر مربوط به اون به طور اتوماتیک حذف بشه
مثلا به صورتی باشه هرجا یه دستور delete اجرا شد یه تابع توی مودل فراخونی بشه که تصاویر و فایل های مرتبط رو حذف کنه
شما به چه صورتی هنگام حذف محصول یا کاربر تصاویرشو حذف میکنید؟ روش خاصی وجود نداره برای این کار؟


ثبت پرسش جدید
AriaieBOY
تخصص : TALL Stack Lover
@ariaieboy 4 سال پیش مطرح شد
1

@mahdihoseini1380
کار نشد نداره
و این مسئله ای که گفتید بستگی داره به روشی که دارید عمل میکنید.
اگر آدرس تصاویر مربوط به هر کاربر داشته باشید میتونید خیلی راحت اینکار انجام بدید.
من خودم به شخصه داخل همون کنترلر که داره عملیات حذف انجام میده میام اون مثلا آواتار کاربر چک میکنم ببینم فایلش وجود داره یا نه اگر وجود داشت حذفش میکنم.
حالا ممکنه شما تعداد زیادی فایل مرتبط با یک شخص داشته باشید. و میخواهید موقعی که مثلا یک کاربر یک پست یا ... را حذف کردید تصاویر مربوط به اون را هم حذف کنید.
https://laravel.com/docs/8.x/eloquent#events
مطابق لینک بالا هنگام انجام عملیات های دیتابیس یکسری ایونت فایر میشه و شما میتونید با استفاده از این ایونت ها موقعی که یک کاربر مثلا در حال deleting هست یک جاب ران کنید که کارش فقط حذف تصاویر باشه و داخل اون جاب مشخص کنید که آدرس تصاویر مربوط به کاربر بگیره و در صورت وجود داشتن همچین فایل اون حذف کنه.
روش دیگه هم اینه که soft delete کنید اون کاربر به عنوان مثال بعد یک جاب ست کنید که هر 24 ساعت یا هر مدت زمانی که مد نظرتون هست چک کنه اگر موردی بود که سافت دیلیت شده بود بیاد فایل ها رو حذف کنه و بعد یوزر هارد دیلیت کنه.

این روش ها رو بر اساس نیازتون میتونید پیاده کنید.


وحید نوری
تخصص : برنامه نویس سایت
@vahidnuri507 4 سال پیش مطرح شد
2

این کار نیازی به مدل سازی نداره! شما در جدول محصولات یه فیلد photo به صورت کلید حارجی تعریف کنید و ondelete('cascade') رو براش قرار بدین. با این کار محصول حذف بشه تمام کلید های خارجی مرتبط با اون هم حذف میشه


سید مهدی حسینی
@mahdihoseini1380 4 سال پیش مطرح شد
0

ممنون از همگی

@vahidnuri507
میشه دراین باره یخورده بیشتر توضیح بدید ، خیلی متوجه منظورتون نشدم.


وحید نوری
تخصص : برنامه نویس سایت
@vahidnuri507 4 سال پیش مطرح شد
1

ببینید شما قاعدتا یک جدول محصولات در دیتابیس خودتون دارید
حالا در داخل این جدول یک فیلد جدید به اسم photo_id تعریف کنید.
حالا درجدول تصائیر دیتا بیس خودتون فیلد photo_id رو به صورت زیر تعریف کنید:
$table->foreignId('photo')->references('id')on('product')
با این روش این فیلد از جدول تصاویر همیشه به محصول مورد نظر اشاره میکنه و با حذف اون محصول تصویر مربوطه هم حذف میشه


سید مهدی حسینی
@mahdihoseini1380 4 سال پیش مطرح شد
0

@vahidnuri507
من توی دیتابیس توی جدول محصول ستون با نوع string و نام تصویر همراه باپسوند قرار دادم، باید الان چیکار کنم؟


علی قنواتی
تخصص : توسعه دهنده وب , لاراول
@aligh 4 سال پیش مطرح شد
1

سلام دوست عزیز
ساده ترین راه اینه که قبل از حذف محصول یا (حالا هر چی) در طی فرایند حذف
اول عکس های مربوط رو پیدا کنید و حذف کنید سپس خود محصول یا هر چی که هست رو پاک کنید
دقت داشته باشید که تمام مراحل بالا در طی خود فرایند حذفتون انجام میشه
موفق باشید


علی قنواتی
تخصص : توسعه دهنده وب , لاراول
@aligh 4 سال پیش مطرح شد
1

@vahidnuri507
سلام دوست عزیز فکر نکنم اینجوری خود عکس حذف بشه فقط رابطه هاش پاک میشن
خود تصویر که در دیتابیس نیست که پاک بشه فقط ادرسش هست
و همچنان عکس در فضایه ذخیره سازی هست


وحید نوری
تخصص : برنامه نویس سایت
@vahidnuri507 4 سال پیش مطرح شد
0

بله داداش خود عکس باید با دستور unlink از مسیر روت و با دستور delete از دیتا بیس حذف بشه. ولی اگه در جدول مربوط کلید به صورت خارجی تعریف بشه بدون اون دستور بالا نمیشه حذف کرد . خطا میگیره


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام