/** * getClassName - функция возвращает название класса по имени таблицы, используя функцию Tools::getClassNameByTableName('table') * * @return string */ public static function getClassName() { return Tools::getClassNameByTableName(static::getTableName()); }
private function CreateSqlSelect() { $helper = new Lib\SqlHelper(); $sqlSelect = "SELECT\n\t"; $tableName = $this->getTableName(); $arMap = $this->getTableMap(); $arSelect = $this->getSelect(); // msDebug($arSelect); if (!isset($this->arSqlFrom[$tableName])) { $this->arSqlFrom[$tableName] = 1; } // msDebug($this->arSqlFrom); if (!empty($arSelect)) { $bSelectFirst = true; foreach ($arSelect as $key => $value) { if ($bSelectFirst) { $bSelectFirst = false; } else { $sqlSelect .= ",\n\t"; } if (is_numeric($key)) { if (!strpos($value, '.')) { try { if (!isset($arMap[$value])) { throw new Exception\ArgumentOutOfRangeException($tableName . '.' . $value); } else { $sqlSelect .= $helper->wrapQuotes($tableName) . "." . $helper->wrapQuotes($value); if (!isset($this->arFieldsEntity[$value])) { $this->arFieldsEntity[$value] = $arMap[$value]; } } } catch (Exception\ArgumentOutOfRangeException $e) { $e->showException(); } } else { $aliasField = str_replace('.', '_', $value); $arFields = explode('.', $value); foreach ($arFields as $k => $field) { if (isset($arFields[$k + 1])) { try { if (isset($this->arFieldsEntity[$field])) { $fieldMap = $this->arFieldsEntity[$field]; } elseif (isset($arMap[$field])) { $fieldMap = $arMap[$field]; } elseif (isset($linkedMap) && isset($linkedMap[$field])) { $fieldMap = $linkedMap[$field]; } else { throw new Exception\ArgumentOutOfRangeException($field); } } catch (Exception\ArgumentOutOfRangeException $e) { die($e->showException()); } $linked = $fieldMap->getLink(); list($linkedTable, $linkedField) = explode('.', $linked); $linkedSql = $helper->wrapQuotes($linkedTable) . '.' . $helper->wrapQuotes($linkedField); $linkedClass = Lib\Tools::getClassNameByTableName($linkedTable); $linkedMap = $linkedClass::getMapArray(); } if ($k == 0) { $arFieldTable[] = $tableName; $arFieldTable[] = $linkedTable; } else { $arFieldTable[] = $linkedTable; } $lastField = $arFields[$k - 1]; $selectField = $field; } $lastFieldTable = $arFieldTable[count($arFieldTable) - 3]; $sqlSelect .= $helper->wrapQuotes($linkedTable) . "." . $helper->wrapQuotes($selectField) . " AS " . $helper->wrapQuotes($aliasField); if (!isset($this->arFieldsEntity[$aliasField])) { $this->arFieldsEntity[$aliasField] = $linkedMap[$selectField]; } if (!isset($this->arSqlFrom[$linkedTable])) { $this->arSqlFrom[$linkedTable] = 1; } if (!isset($this->arSqlWhere[$linkedSql])) { $this->arSqlWhere[$linkedSql] = $helper->wrapQuotes($lastFieldTable) . '.' . $helper->wrapQuotes($lastField); } } } else { //msDebug($key); msDebug($value); if (!strpos($key, '.')) { try { if (!isset($arMap[$key])) { throw new Exception\ArgumentOutOfRangeException($tableName . '.' . $key); } else { $sqlSelect .= $helper->wrapQuotes($tableName) . "." . $helper->wrapQuotes($key) . " AS " . $helper->wrapQuotes($value); if (!isset($this->arFieldsEntity[$value])) { $this->arFieldsEntity[$value] = $arMap[$key]; } } } catch (Exception\ArgumentOutOfRangeException $e) { $e->showException(); } } else { $aliasField = $value; $arFieldTable = array(); $arFields = explode('.', $key); //msDebug($arFields); foreach ($arFields as $k => $field) { //msDebug(isset($arFields[$k+1])); if (isset($arFields[$k + 1])) { try { //msDebug($field); //msDebug($this->arFieldsEntity); //msDebug($arMap); //msDebug($linkedMap); if (isset($this->arFieldsEntity[$field])) { $fieldMap = $this->arFieldsEntity[$field]; } elseif (isset($arMap[$field])) { $fieldMap = $arMap[$field]; } elseif (isset($linkedMap) && isset($linkedMap[$field])) { $fieldMap = $linkedMap[$field]; } else { throw new Exception\ArgumentOutOfRangeException($field); } } catch (Exception\ArgumentOutOfRangeException $e) { die($e->showException()); } $linked = $fieldMap->getLink(); list($linkedTable, $linkedField) = explode('.', $linked); $linkedSql = $helper->wrapQuotes($linkedTable) . '.' . $helper->wrapQuotes($linkedField); $linkedClass = Lib\Tools::getClassNameByTableName($linkedTable); $linkedMap = $linkedClass::getMapArray(); } if ($k == 0) { $arFieldTable[] = $tableName; $arFieldTable[] = $linkedTable; } else { $arFieldTable[] = $linkedTable; } $lastField = $arFields[$k - 1]; $selectField = $field; } $lastFieldTable = $arFieldTable[count($arFieldTable) - 3]; $sqlSelect .= $helper->wrapQuotes($linkedTable) . "." . $helper->wrapQuotes($selectField) . " AS " . $helper->wrapQuotes($aliasField); if (!isset($this->arFieldsEntity[$aliasField])) { $this->arFieldsEntity[$aliasField] = $linkedMap[$selectField]; } if (!isset($this->arSqlFrom[$linkedTable])) { $this->arSqlFrom[$linkedTable] = 1; } if (!isset($this->arSqlWhere[$linkedSql])) { $this->arSqlWhere[$linkedSql] = $helper->wrapQuotes($lastFieldTable) . '.' . $helper->wrapQuotes($lastField); } } } } //$sql .= $quote.join ($quote.",\n\t".$quote,$arSelect).$quote; } else { $sqlSelect .= "*"; } return $sqlSelect . "\n"; }