Example #1
0
 /**
  * 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;
 }
Example #2
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;
 }
Example #3
0
 /**
  * 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];
         }
     }
 }
Example #4
0
 /**
  * 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;
 }
Example #6
0
 /**
  * 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;
     }
 }
Example #7
0
 /**
  * 根据表名获得字段
  * @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;
 }