/** * Funkce pro aktualizaci info o sloupcích v daném datovém zdroji * @param Datasource $datasource * @throws \LeanMapper\Exception\InvalidStateException * @throws \Nette\Application\ApplicationException */ public function reloadDatasourceColumns(Datasource &$datasource) { $this->databasesFacade->openDatabase($datasource->getDbConnection()); $datasourceColumns = $datasource->datasourceColumns; $datasourceColumnsArr = array(); if (!empty($datasourceColumns)) { foreach ($datasourceColumns as $datasourceColumn) { $datasourceColumnsArr[$datasourceColumn->name] = $datasourceColumn; } } /** @var DbColumn[] $dbColumns */ $dbColumns = $this->databasesFacade->getColumns($datasource->dbTable); if (!empty($dbColumns)) { foreach ($dbColumns as $dbColumn) { if ($dbColumn->name == 'id') { continue; /*ignorujeme sloupec s ID*/ } if (isset($datasourceColumnsArr[$dbColumn->name])) { unset($datasourceColumnsArr[$dbColumn->name]); } else { //vytvoříme info o datovém sloupci $datasourceColumn = new DatasourceColumn(); $datasourceColumn->name = $dbColumn->name; $datasourceColumn->datasource = $datasource; switch ($dbColumn->dataType) { case DbColumn::TYPE_FLOAT: $datasourceColumn->type = DatasourceColumn::TYPE_FLOAT; break; case DbColumn::TYPE_INTEGER: $datasourceColumn->type = DatasourceColumn::TYPE_INTEGER; break; default: $datasourceColumn->type = DatasourceColumn::TYPE_STRING; } $datasourceColumn->strLen = $dbColumn->strLength; $this->datasourceColumnsRepository->persist($datasourceColumn); } } } if (!empty($datasourceColumnsArr)) { foreach ($datasourceColumnsArr as $datasourceColumn) { //odmažeme info o sloupcích, které v datové tabulce již neexistují $this->datasourceColumnsRepository->delete($datasourceColumn); } } $datasource = $this->findDatasource($datasource->datasourceId); }
/** * Funkce pro uložení entity DatasourceColumn * @param DatasourceColumn $datasourceColumn * @return int|bool */ public function saveDatasourceColumn(DatasourceColumn &$datasourceColumn) { $result = $this->datasourceColumnsRepository->persist($datasourceColumn); return $result; }