示例#1
0
 /**
  * (non-PHPdoc)
  * @see \ZfcDB\Mapper\MapperInterface::save()
  */
 public function save($object)
 {
     $metadata = new Metadata($this->getDbAdapter());
     $constraints = $metadata->getConstraints($this->tableName);
     $datas = $object;
     if (!is_array($datas)) {
         $datas = $this->getHydrator()->extract($object);
     }
     $primaries = array();
     if (count($constraints)) {
         foreach ($constraints as $constraint) {
             if ($constraint->getType() == "PRIMARY KEY") {
                 $primaries = $constraint->getColumns();
             }
         }
     }
     $edit = true;
     if (count($primaries)) {
         foreach ($primaries as $primarie) {
             if (empty($datas[$primarie])) {
                 $edit = false;
                 break;
             }
         }
     }
     $this->getEventManager()->trigger(__FUNCTION__, $this, array('entity' => $object));
     if ($edit) {
         $this->update($datas, array_intersect_key($datas, array_flip($primaries)));
     } else {
         $this->insert($datas);
     }
     $this->getEventManager()->trigger(__FUNCTION__ . '.post', $this, array('entity' => $object));
     return $this;
 }
示例#2
0
文件: Zend.php 项目: cityware/city-db
 /**
  * Função que pega a coluna de PK
  * @param string $table
  * @param string $schema
  * @return string
  */
 public function getPrimaryColumn($table, $schema)
 {
     $metadata = new zendMetadata($this->getAdapter($this->varConfigAdapter));
     $tableColumns = $metadata->getConstraints($table, $schema);
     $returnPrimaryColumn = null;
     foreach ($tableColumns as $value) {
         if ($value->getType() == 'PRIMARY KEY') {
             $arrayColumns = $value->getColumns();
             $returnPrimaryColumn = $arrayColumns[0];
         }
     }
     return $returnPrimaryColumn;
 }
示例#3
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 Metadata $metadata
  * @param $tableName
  * @param $columnName
  * @return null|\Zend\Db\Metadata\Object\ConstraintObject
  */
 protected function getConstraintForColumn(Metadata $metadata, $tableName, $columnName)
 {
     /** @var \Zend\Db\Metadata\Object\ConstraintObject $constraint */
     foreach ($metadata->getConstraints($tableName) as $constraint) {
         foreach ($constraint->getColumns() as $column) {
             if ($column == $columnName) {
                 return $constraint;
             }
         }
     }
     return null;
 }
示例#5
0
文件: Mysql.php 项目: naxel/zfctool
 /**
  * createColumn
  *
  * FIXME: requried quoted queries data
  *
  * @param   string $table
  * @param   string $column
  * @param   string $datatype
  * @param   string $length
  * @param   string $default
  * @param   bool $notnull
  * @param   bool $primary
  * @return  bool
  */
 public function createColumn($table, $column, $datatype, $length = null, $default = null, $notnull = false, $primary = false)
 {
     // alter table $table add column $column $options
     // alter table `p_zfc`.`asd` add column `name` varchar(123) NOT NULL after `id`
     $column = $this->getDbAdapter()->getPlatform()->quoteIdentifier($column);
     $query = 'ALTER TABLE ' . $this->getDbAdapter()->getPlatform()->quoteIdentifier($table) . ' ADD COLUMN ' . $column;
     // switch statement for $datatype
     switch ($datatype) {
         case AbstractMigration::TYPE_VARCHAR:
             $length = $length ? $length : 255;
             $query .= " varchar({$length})";
             break;
         case AbstractMigration::TYPE_FLOAT:
             $length = $length ? $length : '0,0';
             $query .= " float({$length})";
             break;
         case AbstractMigration::TYPE_ENUM:
             if (is_array($length)) {
                 // array to string 'el','el',...
                 $length = "'" . join("','", $length) . "'";
             }
             $query .= " enum({$length})";
             break;
         default:
             $query .= " {$datatype}";
             break;
     }
     if (!is_null($default)) {
         // switch statement for $datatype
         switch ($datatype) {
             case AbstractMigration::TYPE_TIMESTAMP && $default == 'CURRENT_TIMESTAMP':
                 $query .= " default CURRENT_TIMESTAMP";
                 break;
             default:
                 $query .= ' default ' . $this->getDbAdapter()->getPlatform()->quoteIdentifier($default);
                 break;
         }
     }
     if ($notnull) {
         $query .= " NOT NULL";
     } else {
         $query .= " NULL";
     }
     if ($primary) {
         $metadata = new Metadata($this->getDbAdapter());
         // TODO: drop primary key, add primary key (`all keys`,`$column`)
         $primary = array();
         $constraints = $metadata->getConstraints($table);
         /** @var $constraint \Zend\Db\Metadata\Object\ConstraintObject */
         foreach ($constraints as $constraint) {
             if ($constraint->isPrimaryKey()) {
                 foreach ($constraint->getColumns() as $columnName) {
                     array_push($primary, $columnName);
                 }
             }
         }
         if (sizeof($primary)) {
             $keys = $quotedColumns = $this->quoteIdentifierArray($primary);
             $query .= ", drop primary key, add primary key ({$keys}, {$column})";
         } else {
             $query .= ", add primary key ({$column})";
         }
     }
     $this->query($query, Adapter::QUERY_MODE_EXECUTE);
     return $this;
 }
示例#6
0
 /**
  * add table to DB object
  * @param $tableName
  */
 public function addTable($tableName)
 {
     if ($this->isTblWhiteListed($tableName) && !$this->isTblBlackListed($tableName)) {
         $metadata = new \Zend\Db\Metadata\Metadata($this->db);
         // get the table names
         $columns = $metadata->getColumns($tableName);
         $scheme = array();
         /** @var $column \Zend\Db\Metadata\Object\ColumnObject */
         foreach ($columns as $column) {
             $scheme[$column->getName()] = array('SCHEMA_NAME' => null, 'TABLE_NAME' => $column->getTableName(), 'COLUMN_NAME' => $column->getName(), 'COLUMN_POSITION' => $column->getOrdinalPosition(), 'DATA_TYPE' => $column->getDataType(), 'DEFAULT' => $column->getColumnDefault(), 'NULLABLE' => $column->isNullable(), 'LENGTH' => $column->getCharacterMaximumLength(), 'SCALE' => $column->getNumericScale(), 'PRECISION' => $column->getNumericPrecision(), 'UNSIGNED' => $column->getNumericUnsigned(), 'PRIMARY' => false, 'IDENTITY' => false);
         }
         /** @var $constraintObject \Zend\Db\Metadata\Object\ConstraintObject */
         foreach ($metadata->getConstraints($tableName) as $constraintObject) {
             if ('PRIMARY KEY' === $constraintObject->getType()) {
                 foreach ($constraintObject->getColumns() as $columnName) {
                     $scheme[$columnName]['PRIMARY'] = true;
                     $scheme[$columnName]['IDENTITY'] = true;
                 }
             }
         }
         $this->scheme[$tableName] = $scheme;
         $this->indexes[$tableName] = $this->getIndexListFromTable($tableName);
         if (isset($this->options['loaddata']) && $this->options['loaddata'] == true) {
             $sql = new Sql($this->db);
             $this->data[$tableName] = $sql->prepareStatementForSqlObject($sql->select($tableName))->execute();
         }
     }
 }