public function addColumn($tableName, $columnName, $type, array $options = []) { $column = $this->getColumnDefinition($columnName, $type, $options); $ddl = new Ddl\AlterTable($tableName); $ddl->addColumn($column); $this->queryAdapter($ddl); }
/** * @param Column\ColumnInterface $column * @return static */ public function addColumn(Column\ColumnInterface $column) { if (!empty($this->renameColumns)) { trigger_error('One statement must rename a column, other separate statements must change table definition.', E_USER_DEPRECATED); return $this; } return parent::addColumn($column); }
/** * @covers Zend\Db\Sql\Ddl\AlterTable::getSqlString * @todo Implement testGetSqlString(). */ public function testGetSqlString() { $at = new AlterTable('foo'); $at->addColumn(new Column\Varchar('another', 255)); $at->changeColumn('name', new Column\Varchar('new_name', 50)); $at->dropColumn('foo'); $at->addConstraint(new Constraint\ForeignKey('my_fk', 'other_id', 'other_table', 'id', 'CASCADE', 'CASCADE')); $at->dropConstraint('my_index'); $expected = <<<EOS ALTER TABLE "foo" ADD COLUMN "another" VARCHAR(255) NOT NULL , CHANGE COLUMN "name" "new_name" VARCHAR(50) NOT NULL , DROP COLUMN "foo", ADD CONSTRAINT "my_fk" FOREIGN KEY ("other_id") REFERENCES "other_table" ("id") ON DELETE CASCADE ON UPDATE CASCADE, DROP CONSTRAINT "my_index" EOS; $this->assertEquals($expected, $at->getSqlString()); }
/** * Create one table. if it is exsist, check the columns. if the column is exsist, change it's type, else create the column. * @param unknown $tableName * @param array $table */ private function create_table($tableName, $tableStructureData) { $adapter = $this->adapter; $sql = new Sql($adapter); if (!in_array($tableName, $this->tables)) { // Create the $table $CreateTable = new Ddl\CreateTable($tableName); foreach ($tableStructureData['column'] as $column) { $CreateTable->addColumn($column); } foreach ($tableStructureData['constraint'] as $constraint) { $CreateTable->addConstraint($constraint); } $adapter->query($sql->getSqlStringForSqlObject($CreateTable), $adapter::QUERY_MODE_EXECUTE); } else { // Check the columns $columns = $this->getColumns($tableName); $constraints = $this->getConstraints($tableName); $AlterTable = new Ddl\AlterTable($tableName); foreach ($tableStructureData['column'] as $createColumn) { $column_exsist = false; foreach ($columns as $column) { if ($createColumn->getName() == $column->getName()) { $column_exsist = true; } } if ($column_exsist) { // Alter the table, change the column. $AlterTable->changeColumn($createColumn->getName(), $createColumn); } else { // Alter the table, add the column. $AlterTable->addColumn($createColumn); } } // Delete exsisted constraints(mysql index) but PRIMARY KEY $exsisted_constraints = $this->getConstraints($tableName); foreach ($exsisted_constraints as $exsisted_constraint) { if ($exsisted_constraint->getType() != 'PRIMARY KEY') { $adapter->query('ALTER TABLE `' . $tableName . '` DROP index `' . str_replace('_zf_' . $tableName . '_', '', $exsisted_constraint->getName()) . '`', $adapter::QUERY_MODE_EXECUTE); } } // Add all constraints but PRIMARY KEY foreach ($tableStructureData['constraint'] as $constraint) { if ($constraint instanceof Constraint\PrimaryKey) { // Do nothing } else { // Add to DB $AlterTable->addConstraint($constraint); } } $adapter->query($sql->getSqlStringForSqlObject($AlterTable), $adapter::QUERY_MODE_EXECUTE); } }