/**
  * Загружает зависимости $subItemName для данной сущности
  * @param $subItemName
  * return bool
  */
 function loadRelated($subItemName, $fk = null)
 {
     if (method_exists($this, "load{$subItemName}")) {
         return call_user_func(array($this, "load{$subItemName}"));
     } else {
         $tableName = Lms_Item::getTableName($subItemName);
         if ($fk === null) {
             $fk = $this->_getSimplePk();
         }
         $fkValue = $this->__getValue($fk);
         $rows = $this->_slaveDb->select("SELECT * FROM {$tableName} WHERE ?#=?", $fk, $fkValue);
         if ($rows) {
             $subItemPk = Lms_Item::getStruct($subItemName)->getPk();
             foreach ($rows as $row) {
                 $scalarPkValue = Lms_Item_Scalar::extractScalarPkValue($row, $subItemPk);
                 Lms_Item_Store::setValues($tableName, $scalarPkValue, $row, true);
             }
             Lms_Item_Store::rebuildIndex($tableName);
         }
     }
 }
Ejemplo n.º 2
0
 /**
  * Перестраивает индексы 
  * @param string $tableName
  * @param string $indexName
  * @return bool
  */
 public static function rebuildIndex($tableName, $indexName = false)
 {
     $rebuldIndexes = array();
     if (!$indexName) {
         //если indexName == false, то перестраиваем все индексы
         $rebuldIndexes = self::getStruct($tableName)->getIndexesNames();
     } else {
         //перестраиваем только $indexName
         $rebuldIndexes = array($indexName);
     }
     foreach ($rebuldIndexes as $rebuldIndexName) {
         self::$_index[$tableName][$rebuldIndexName] = array();
         $index = self::getStruct($tableName)->getIndex($rebuldIndexName);
         if (isset(self::$_data[$tableName])) {
             foreach (self::$_data[$tableName] as $scalarPK => $values) {
                 $scalarIndexKey = Lms_Item_Scalar::extractScalarPkValue($values, $index['fields']);
                 self::$_index[$tableName][$rebuldIndexName][$scalarIndexKey][] = $scalarPK;
             }
         }
     }
     return true;
 }