نقل قول: Caching in CActiveDataProvicer
ببینید شما الان وقتی یک رکورد درج میکنید کش باید Expire بشه چون بیشترین update_time الان فرق کرده. البته به شرط اینکه update_time رو موقع ساخت رکورد با create_time یا timestamp جاری مقداردهی کنید و NULL نباشه.
نقل قول: Caching in CActiveDataProvicer
update_time که مسلما مقدار داره. زمانی که رکوردی در جدول درج نشده باشه مشکل پیش میاد. CActiveDataProvider میاد اول count رو میگیره برای pagination، بعد رکوردها رو واکشی میکنه. اگر count صفر باشه دیگه رکوردها واکشی نمیشن، بنابراین کوئری بعدی به دیتابیس که میتونه هر جای برنامه باشه ناخواسته مقدارش از روی کش بر میگرده. من میخوام اگر count برابر 0 بود اون یک کوئری بعدی از کش استفاده نکنه.
متوجه منظورم شدید؟
نقل قول: Caching in CActiveDataProvicer
خوب چرا COUNT(*) رو بعنوان پارامتر cache نمیگذارین. البته باز هم فکر میکنم نباید این کد مشکلی داشته باشه و update_time شما مقدار نداره. یک رکورد دستی درج کنید و update_time رو خالی بگذارین ببینید چی درج میشه و مقدار پیشفرض داره یا نه. اگه داشت که هیچ ولی اگه نداشت کد insert برنامه خودتون یا رفتارهای beforesave و... رو بررسی کنید ببینید update_time مقدار میگیره یا خیر.
نقل قول: Caching in CActiveDataProvicer
فکر میکنم منظور من رو متوجه نشدید. مشکل من با متد CActiveRecordCache هستش.
public CActiveRecord cache(integer $duration, CCacheDependency|ICacheDependency $dependency=NULL, integer $queryCount=1)
وقتی CACtiveDataProvider رو به این صورت به کار می بریم:
CActiveDataProvider(Post::model()->cache($duration, $dependecy, 2) . . .
. . .
یعنی coueryCount رو برابر 2 قرار میدیم، یک کوئری کش برای گرفتن count جهت pagination و یک کوئری کش برای واکشی رکوردها. اگر count برابر 0 باشه. کوئری کش دوم اجرا نمیشه و دستوری بعدی مثل این:
$posts = POST::model()->findAll()
هم از کش استفاده میکنه. در حالی که ما نمیخوایم از کش استفاده بشه. منوجه شدید؟
نقل قول:
$queryCount |
integer |
number of SQL queries that need to be cached after calling this method. Defaults to 1, meaning that the next SQL query will be cached. |
البته فکر کنم این کد مشکل رو حل کنه: (بعد از CACtiveDataProvider)
Yii::app()->db->cache()->queryCachingCount = 0
نقل قول: Caching in CActiveDataProvicer
خوب دلیل اینکه 2 گذاشتین چیه؟ همون 1 بگذارین باشه دیگه. Yii بطور خودکار کوئری بعدی رو کش میکنه و موقع واکشی کوئری بعدی، اگه همچنان dependency نقض نشده باشه، یکبار دیگه کش رو تمدید میکنه. شما فقط با همون پارامترهای duration و dependency کار کنید.
نقل قول: Caching in CActiveDataProvicer
دلیل گذاشتن 2:
First param in CActiveDataProvider could be a string with model name or instance of class. So, you may use
CActiveRecord::cache() for cache, but you need set third param to 2, because you should cache 2 queries: counting and get data.
. . .
البته فکر کنم راه حل پیدا شد: (بعد از CACtiveDataProvider)
Yii::app()->db->cache()->queryCachingCount = 0
نقل قول: Caching in CActiveDataProvicer
میشه دقیقاً بگین چه کاری میخواین انجام بدین و طبق چه راهنمایی (لینک بدین) تا اینجا پیش رفتین؟ احساس میکنم یک جای کار رو دارین اشتباه انجام میدین.
نقل قول: Caching in CActiveDataProvicer
نقل قول:
نوشته شده توسط
MMSHFE
میشه دقیقاً بگین چه کاری میخواین انجام بدین و طبق چه راهنمایی (لینک بدین) تا اینجا پیش رفتین؟ احساس میکنم یک جای کار رو دارین اشتباه انجام میدین.
پست قبلی توضیح دادم. که فکر کنم راه رو پیدا شد.
نقل قول: Caching in CActiveDataProvicer
نقل قول:
نوشته شده توسط
MMSHFE
خوب دلیل اینکه 2 گذاشتین چیه؟ همون 1 بگذارین باشه دیگه. Yii بطور خودکار کوئری بعدی رو کش میکنه و موقع واکشی کوئری بعدی، اگه همچنان dependency نقض نشده باشه، یکبار دیگه کش رو تمدید میکنه. شما فقط با همون پارامترهای duration و dependency کار کنید.
مطمئنید؟ من امتحان کردم قبلا جواب نداده! ما میخوایم دو تا کوئری متفاوت کش بشن. یکی برای count یکی هم برای واکشی رکوردها