سلام. احتمالا منظورشون آرایه result هست…با این پیش فرض، خب یک تابع بنویس که اندیس ها رو تغییر بده به id جدول item! بعید میدونم بشه تعیین کرد اندیس با فیلد دیتابیس پر شه[/rtl][/font]
[font="Tahoma"][rtl]راجع به اینکه چند بار میخواهید یک آرایه بزرگ رو از دیتابیس بخونید و هربار روش چرخش انجام بدید، برای این میشه از یک کش ساده استفاده کرد. کد زیر رو ببینید:
[/rtl][/font]
private _somethingFromDB;
public function getSomethingFromDB()
{
if (!isset($this->_somethingFromDB)) {
$rawDataFromDb = Class::model()->findAll($someCriteria);
$this->_somethingFromDB = Iterator::iterate($rawDataFromDb);
}
return $this->_somethingFromDB;
}
[font="Tahoma"][rtl]با روش بالا، اگر چندین بار هم در یک پروسه نیاز داشته باشید که از دیتابیس اون اطلاعات خاص رو بخونید، فقط بار اول کوئری زده میشه و دفعات بعد از همون اطلاعات اول استفاده مجدد میشه. ضمنا در عمل چرخش هم صرفه جویی شده و فقط یکبار انجام شده
منتها اکر بخواهید بین درخواست های متفاوت این اطلاعات قابل استفاده مجدد باشه دیگه باید از caching پیشرفته تری استفاده کنید که خود Yii خیلی خوب در اختیار میگذاره
چیزی شبیه به این:[/rtl][/font]
private _somethingFromDB;
public function getSomethingFromDB()
{
if (!isset($this->_somethingFromDB)) {
$rawDataFromDb = Class::model()->findAll($someCriteria);
$this->_somethingFromDB = Iterator::iterate($rawDataFromDb);
Yii::app()->cache->set('uniqueCacheId',$this->_somethingFromDB); // permanent cache
}
return $this->_somethingFromDB;
}
[rtl][font=“Tahoma”]پ.ن: کد دوم که از کش فرمورک استفاده میکنه فقط جنبه مفهومی داره وگرنه با اینکه کش داره ست میشه ولی جایی چک نمیشه که بعدا از کش بخواد بازیابی شه! آقا عماد لطف کرد نسخه کاملش رو نوشت [/font][/rtl]