示例#1
0
 /**
  * getClassName - функция возвращает название класса по имени таблицы, используя функцию Tools::getClassNameByTableName('table')
  *
  * @return string
  */
 public static function getClassName()
 {
     return Tools::getClassNameByTableName(static::getTableName());
 }
示例#2
0
 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";
 }