Exemplo n.º 1
0
 /**
  * Get sorted and grouped values from table column
  *
  * @param Zend_Db_Adapter_Abstract $db
  * @param array $options
  * @return array
  */
 public static function GetValuesForCol($db, $options)
 {
     $arrValues = FALSE;
     //----------------------
     // инициализация параметров
     $defaults = array('offset' => 0, 'limit' => 0, 'group' => TRUE, 'order' => 'p.ts_created');
     foreach ($defaults as $k => $v) {
         $options[$k] = array_key_exists($k, $options) ? $options[$k] : $v;
     }
     $select = self::_GetBaseQuery($db, $options);
     // set the offset, limit, and ordering of results
     if ($options['limit'] > 0) {
         $select->limit($options['limit'], $options['offset']);
     }
     // Установим параметры сортировки для таблицы
     $select = self::GetSelectForSort($select, $options);
     // Добавим группировку и соответствующую колонку
     $aliasTable = Default_Model_DatabaseObject::getAliasForTable($select, $options['joinTableForSort']);
     if ($aliasTable) {
         $orderData = $select->getPart(Zend_Db_Select::ORDER);
         if ($options['group']) {
             $select->group($orderData[0][0]);
         }
         // Найдем алиас таблицы, запрашиваемого поля
         $arrAliasTable = explode('_', $aliasTable);
         $select->columns(array($arrAliasTable[0] . '.id', $orderData[0][0]));
     } else {
         if ($options['group']) {
             $select->group('p.' . $options['field']);
         }
         $select->columns(array('p.id', 'p.' . $options['field']));
     }
     $strSelect = $select->__toString();
     //------ Применить кеширование -------
     $dbCache = Default_Plugin_SysBox::getCache('db');
     if ($dbCache->getOption('caching')) {
         // Получим TAG для кеширования
         $arrItems = array($select, $options);
         $strSerialize = serialize($arrItems);
         $tagCache = md5($strSerialize);
         // Очистим кеш
         if (Default_Plugin_SysBox::isCleanCache()) {
             $dbCache->clean(Zend_Cache::CLEANING_MODE_ALL);
         }
         // Получим данные из кеша по тегу $tagCache
         $arrValues = $dbCache->load($tagCache);
     }
     // проверка, есть ли уже данные в кэше:
     if ($arrValues === FALSE) {
         $arrValues = $db->fetchPairs($select);
         // Если разрешено кеширование, то сохраним данные в кеше
         if ($dbCache->getOption('caching')) {
             $dbCache->save($arrValues, $tagCache);
         }
     } else {
         $result = $arrValues;
     }
     return $arrValues;
 }