سلام دوستان
یه سوال ایا روشی وجود داره که هنگامی که یه محصول حذف شد تصاویر مربوط به اون به طور اتوماتیک حذف بشه
مثلا به صورتی باشه هرجا یه دستور delete اجرا شد یه تابع توی مودل فراخونی بشه که تصاویر و فایل های مرتبط رو حذف کنه
شما به چه صورتی هنگام حذف محصول یا کاربر تصاویرشو حذف میکنید؟ روش خاصی وجود نداره برای این کار؟
@mahdihoseini1380
کار نشد نداره
و این مسئله ای که گفتید بستگی داره به روشی که دارید عمل میکنید.
اگر آدرس تصاویر مربوط به هر کاربر داشته باشید میتونید خیلی راحت اینکار انجام بدید.
من خودم به شخصه داخل همون کنترلر که داره عملیات حذف انجام میده میام اون مثلا آواتار کاربر چک میکنم ببینم فایلش وجود داره یا نه اگر وجود داشت حذفش میکنم.
حالا ممکنه شما تعداد زیادی فایل مرتبط با یک شخص داشته باشید. و میخواهید موقعی که مثلا یک کاربر یک پست یا ... را حذف کردید تصاویر مربوط به اون را هم حذف کنید.
https://laravel.com/docs/8.x/eloquent#events
مطابق لینک بالا هنگام انجام عملیات های دیتابیس یکسری ایونت فایر میشه و شما میتونید با استفاده از این ایونت ها موقعی که یک کاربر مثلا در حال deleting هست یک جاب ران کنید که کارش فقط حذف تصاویر باشه و داخل اون جاب مشخص کنید که آدرس تصاویر مربوط به کاربر بگیره و در صورت وجود داشتن همچین فایل اون حذف کنه.
روش دیگه هم اینه که soft delete کنید اون کاربر به عنوان مثال بعد یک جاب ست کنید که هر 24 ساعت یا هر مدت زمانی که مد نظرتون هست چک کنه اگر موردی بود که سافت دیلیت شده بود بیاد فایل ها رو حذف کنه و بعد یوزر هارد دیلیت کنه.
این روش ها رو بر اساس نیازتون میتونید پیاده کنید.
این کار نیازی به مدل سازی نداره! شما در جدول محصولات یه فیلد photo به صورت کلید حارجی تعریف کنید و ondelete('cascade') رو براش قرار بدین. با این کار محصول حذف بشه تمام کلید های خارجی مرتبط با اون هم حذف میشه
ممنون از همگی
@vahidnuri507
میشه دراین باره یخورده بیشتر توضیح بدید ، خیلی متوجه منظورتون نشدم.
ببینید شما قاعدتا یک جدول محصولات در دیتابیس خودتون دارید
حالا در داخل این جدول یک فیلد جدید به اسم photo_id تعریف کنید.
حالا درجدول تصائیر دیتا بیس خودتون فیلد photo_id رو به صورت زیر تعریف کنید:
$table->foreignId('photo')->references('id')on('product')
با این روش این فیلد از جدول تصاویر همیشه به محصول مورد نظر اشاره میکنه و با حذف اون محصول تصویر مربوطه هم حذف میشه
@vahidnuri507
من توی دیتابیس توی جدول محصول ستون با نوع string و نام تصویر همراه باپسوند قرار دادم، باید الان چیکار کنم؟
سلام دوست عزیز
ساده ترین راه اینه که قبل از حذف محصول یا (حالا هر چی) در طی فرایند حذف
اول عکس های مربوط رو پیدا کنید و حذف کنید سپس خود محصول یا هر چی که هست رو پاک کنید
دقت داشته باشید که تمام مراحل بالا در طی خود فرایند حذفتون انجام میشه
موفق باشید
@vahidnuri507
سلام دوست عزیز فکر نکنم اینجوری خود عکس حذف بشه فقط رابطه هاش پاک میشن
خود تصویر که در دیتابیس نیست که پاک بشه فقط ادرسش هست
و همچنان عکس در فضایه ذخیره سازی هست
بله داداش خود عکس باید با دستور unlink از مسیر روت و با دستور delete از دیتا بیس حذف بشه. ولی اگه در جدول مربوط کلید به صورت خارجی تعریف بشه بدون اون دستور بالا نمیشه حذف کرد . خطا میگیره
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟