سلام به چه شکل میشه از Cache::forget('key') در observer استفاده کرد؟
سلام مهدی جان
باید ببینید در چه مواردی بعد از هر عملیات (CRUD) نیاز هست که آخرین تغییرات رو داشته باشید و توی هرکدوم که لازم بود کشها رو پاک کنید.
مثلا ویدیوها رو کش کردیم، وقتی ویدیو جدیدی اضافه بشه یا ویدیو ویرایش یا حذف شد نیاز هست که کش پاک بشه تا وقتی کاربری به صفحه ویدیوها رفت دوباره ویدیوها کش بشه تا به آخرین تغییراتی که توی جدول ویدیوها هست دسترسی داشته باشه.
پس توی Observer مربوط به ویدیوها و توی متدهای created, updated, deleted نیاز هست که از Cache::forget استفاده کنیم.
صادق برزگر۱۵ دی ۱۴۰۱، ۰۳:۵۸
درست میفرمایید سوال من در مورد نحو پیاده سازی cache::forget هست
ی بار هم cache:clear کردم ک اگه داستانی وجود داره پاک بشه ولی موضوع بازم حل نشد .
اینم اضافه کنم ک من همزمان 3,4 تا پروژه در موازات هم ایجاد کردم برای تمرین بیشتر و بیشتر و هربار از یکی به یکی سویچ میکنم
البته ک دیتابیسهای این پروژها کاملا متفاوته و هیچ تداخلی از این بابت نیست حالا امکان داره مشکلاتی ک برای من بوجود میاد بر گرده به این مسئله؟
Mahdi۱۶ دی ۱۴۰۱، ۰۵:۲۱
مهدی جان اگه دقت کنید در getCacheKeyNameAttribute اومدید disliked رو گذاشتید و توی هر دو تابع getLikeCountAttribute و getDislikeCountAttribute از همون استفاده کردید که این درست نیست، باید برای هر کدوم کلیدشون جدا باشه.
مهدی جان، کدتون رو بصورت زیر استفاده کنید تا مشکل برطرف بشه:
Cache::forget($like->likeable->getCacheDislikeAttribute());
// OR
Cache::forget($like->likeable->cache_dislike);
صادق برزگر۱۶ دی ۱۴۰۱، ۱۰:۳۳
استاد تشخیص اینکه چ زمان از property یا method باید استفاده کنیم به چ شکله؟
Mahdi۱۶ دی ۱۴۰۱، ۱۰:۵۳
بستگی به کاری که میخواید انجام بدید باید از property یا method استفاده کنید.
وقتی میخواید با استفاده از ریلیشنها عملیاتی مثل create, update یا where و ... رو انجام بدید باید از متد استفاده کنید چون نیاز به query builder هست و وقتی بصورت متد ریلیشن رو صدا میزنیم به ما یه query builder برمیگردونه و میتونیم عملیات موردنظرمون رو انجام بدیم و در صورت نیاز حتی خروجی هم بگیریم.
وقتی فقط نیاز به گرفتن خروجی داشته باشیم باید ریلیشنها رو بصورت propety استفاده کنیم.