/** * Загружает зависимости $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); } } }
/** * Перестраивает индексы * @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; }