/** * Process the command * * @return integer */ public function processCommandTask() { // output message $this->console->writeTaskLine('task_crud_check_table_name', array($this->console->colorize($this->params->paramTableName, Color::GREEN))); /** @var Adapter $dbAdapter */ $dbAdapter = $this->params->dbAdapter; // get Metadata for database adapter $metaData = new Metadata($dbAdapter); // fetch database $database = $dbAdapter->getCurrentSchema(); // fetch table object try { $table = $metaData->getTable($this->params->paramTableName); } catch (Exception $e) { $this->console->writeFailLine('task_crud_check_table_not_exists', array($this->console->colorize($this->params->paramTableName, Color::GREEN), $this->console->colorize($database, Color::GREEN))); return 1; } $tableObjects = array(); /** @var TableObject $tableObject */ foreach ($metaData->getTables() as $tableObject) { $tableObjects[$tableObject->getName()] = $tableObject; } $this->params->currentTableObjects = $tableObjects; return 0; }
private function getTableMeta() { if (!$this->tableMeta) { $db = $this->db; $meta = new Metadata($db); try { $meta->getTable($this->table, $this->schema); } catch (\Exception $e) { exit($e->getMessage()); } $this->tableMeta = $meta; } return $this->tableMeta; }
/** * Função que pega a ID do registro inserido * @param array $rawState * @param object $sql * @return integer */ private function getLastInsertId(array $rawState, $sql) { if (self::$varReturnInsertId) { $table = $rawState['table']; $tableMetadata = new \Zend\Db\Metadata\Metadata($this->getAdapter($this->varConfigAdapter)); $tableInfo = $tableMetadata->getTable($table->getTable(), $table->getSchema()); if (!empty(self::$varSqlSequence)) { return $this->getAdapter($this->varConfigAdapter)->getDriver()->getConnection()->getLastGeneratedValue(self::$varSqlSequence); } else { $primaryKeyColumn = null; foreach ($tableInfo->getConstraints() as $key => $value) { if ($value->getType() == 'PRIMARY KEY') { $temp = $value->getColumns(); $primaryKeyColumn = $temp[0]; } } $select = $sql->select($rawState['table']); foreach ($rawState['columns'] as $key => $value) { if (!empty($rawState['values'][$key])) { $select->where("{$value} = '{$rawState['values'][$key]}'"); } else { $select->where("{$value} IS NULL"); } } $statement = $sql->prepareStatementForSqlObject($select); $results = $statement->execute(); $retorno = self::$resultSetPrototype->initialize($results)->toArray(); self::freeMemory(); return $retorno[0][$primaryKeyColumn]; } } }
/** * Função que gera um print dos metadados */ public function getPrintMetadata() { $metadata = new Metadata($this->getDbAdapter()); foreach ($metadata->getSchemas() as $valueSchema) { echo 'In Schema ' . $valueSchema . PHP_EOL; // get the table names $tableNames = $metadata->getTableNames($valueSchema); foreach ($tableNames as $tableName) { echo 'In Table ' . $tableName . PHP_EOL; $table = $metadata->getTable($tableName, $valueSchema); echo ' With columns: ' . PHP_EOL; foreach ($table->getColumns() as $column) { echo ' ' . $column->getName() . ' -> ' . $column->getDataType() . PHP_EOL; } echo PHP_EOL; echo ' With constraints: ' . PHP_EOL; foreach ($metadata->getConstraints($tableName, $valueSchema) as $constraint) { /** @var $constraint Zend\Db\Metadata\Object\ConstraintObject */ echo ' ' . $constraint->getName() . ' -> ' . $constraint->getType() . PHP_EOL; if (!$constraint->hasColumns()) { continue; } echo ' column: ' . implode(', ', $constraint->getColumns()); if ($constraint->isForeignKey()) { $fkCols = array(); foreach ($constraint->getReferencedColumns() as $refColumn) { $fkCols[] = $constraint->getReferencedTableName() . '.' . $refColumn; } echo ' => ' . implode(', ', $fkCols); } echo PHP_EOL; } echo '----' . PHP_EOL; } echo '-------------------------------------------' . PHP_EOL; } }
/** * @param $module * @param $version * @param $adapter_name * @return array */ public function fetchColumns($module, $version, $adapter_name) { $tables = []; if (!isset($this->config['db']['adapters'])) { // error } $config = $this->config['db']['adapters']; $adapter = new Adapter($config[$adapter_name]); try { $metadata = new Metadata($adapter); } catch (InvalidArgumentException $e) { if (strpos($e->getMessage(), 'Unknown adapter platform') === false) { throw $e; } return []; } $tableNames = $metadata->getTableNames(null, true); foreach ($tableNames as $tableName) { if ($this->moduleHasService($module, $version, $tableName)) { continue; } $tableData = ['table_name' => $tableName]; $table = $metadata->getTable($tableName); $tableData['columns'] = []; $constraints = $this->getConstraints($metadata, $tableName); /** @var \Zend\Db\Metadata\Object\ColumnObject $column */ foreach ($table->getColumns() as $column) { $item = ['name' => $column->getName(), 'type' => $column->getDataType(), 'required' => !$column->isNullable(), 'filters' => [], 'validators' => [], 'constraints' => []]; foreach ($constraints as $constraint) { if ($column->getName() == $constraint['column']) { $item['constraints'][] = ucfirst(strtolower($constraint['type'])); switch (strtoupper($constraint['type'])) { case 'PRIMARY KEY': break; case 'FOREIGN KEY': $constraintObj = $this->getConstraintForColumn($metadata, $tableName, $column->getName()); $validator = $this->validators['foreign_key']; $referencedColumns = $constraintObj->getReferencedColumns(); $validator['options'] = ['adapter' => $adapter_name, 'table' => $constraintObj->getReferencedTableName(), 'field' => $referencedColumns[0]]; $item['validators'][] = $validator; break; case 'UNIQUE': $validator = $this->validators['unique']; $validator['options'] = ['adapter' => $adapter_name, 'table' => $tableName, 'field' => $column->getName()]; $item['validators'][] = $validator; break; } } } if (in_array(strtolower($column->getDataType()), ['varchar', 'text'])) { $item['length'] = $column->getCharacterMaximumLength(); if (in_array('Primary key', array_values($item['constraints']))) { unset($item['filters']); unset($item['validators']); $tableData['columns'][] = $item; continue; } $item['filters'] = $this->filters['text']; $validator = $this->validators['text']; $validator['options']['max'] = $column->getCharacterMaximumLength(); $item['validators'][] = $validator; } elseif (in_array(strtolower($column->getDataType()), ['tinyint', 'smallint', 'mediumint', 'int', 'bigint'])) { $item['length'] = $column->getNumericPrecision(); if (in_array('Primary key', array_values($item['constraints']))) { unset($item['filters']); unset($item['validators']); $tableData['columns'][] = $item; continue; } $item['filters'] = $this->filters['integer']; } $tableData['columns'][] = $item; } $tables[] = $tableData; } return $tables; }
/** * Is the schema ready? * * @return bool */ public function hasSchema() { try { $metadata = new Metadata($this->adapter); $metadata->getTable($this->tableName); return true; } catch (\Exception $exception) { return false; } }
/** * 根据表名获得字段 * @return array|bool */ public function getColumns($conPri = false) { if (empty($this->table)) { return false; } $metadata = new Metadata($this->getAdapter()); $table = $metadata->getTable($this->table); $columns = $table->getColumns(); $cols = array(); if (in_array($this->table, array('MemberInfo'))) { $conPri = true; } if (!empty($columns)) { foreach ($columns as $c) { $cols[$c->getName()]['ableNull'] = $c->getIsNullable(); $cols[$c->getName()]['default'] = $c->getColumnDefault(); $cols[$c->getName()]['comment'] = $c->getColumnComment(); } if (!$conPri) { unset($cols[$this->_primary]); } } return $cols; }