本文整理汇总了PHP中Propel\Generator\Model\Database::addTable方法的典型用法代码示例。如果您正苦于以下问题:PHP Database::addTable方法的具体用法?PHP Database::addTable怎么用?PHP Database::addTable使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Propel\Generator\Model\Database
的用法示例。
在下文中一共展示了Database::addTable方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: testValidateReturnsFalseWhenTwoTablesHaveSamePhpName
public function testValidateReturnsFalseWhenTwoTablesHaveSamePhpName()
{
$table1 = new Table('foo');
$table2 = new Table('bar');
$table2->setPhpName('Foo');
$database = new Database();
$database->addTable($table1);
$database->addTable($table2);
$appData = new AppData();
$appData->addDatabase($database);
$validator = new SchemaValidator($appData);
$this->assertFalse($validator->validate());
$this->assertContains('Table "bar" declares a phpName already used in another table', $validator->getErrors());
}
示例2: parse
/**
*
*/
public function parse(Database $database)
{
$this->addVendorInfo = $this->getGeneratorConfig()->getBuildProperty('addVendorInfo');
$sql = 'SHOW FULL TABLES';
if ($schema = $database->getSchema()) {
$sql .= ' FROM ' . $database->getPlatform()->quoteIdentifier($schema);
}
$dataFetcher = $this->dbh->query($sql);
// First load the tables (important that this happen before filling out details of tables)
$tables = array();
foreach ($dataFetcher as $row) {
$name = $row[0];
$type = $row[1];
if ($name == $this->getMigrationTable() || $type !== 'BASE TABLE') {
continue;
}
$table = new Table($name);
$table->setIdMethod($database->getDefaultIdMethod());
$database->addTable($table);
$tables[] = $table;
}
// Now populate only columns.
foreach ($tables as $table) {
$this->addColumns($table);
}
// Now add indices and constraints.
foreach ($tables as $table) {
$this->addForeignKeys($table);
$this->addIndexes($table);
$this->addPrimaryKey($table);
$this->addTableVendorInfo($table);
}
return count($tables);
}
示例3: parse
public function parse(Database $database, Task $task = null)
{
$dataFetcher = $this->dbh->query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME <> 'dtproperties'");
// First load the tables (important that this happen before filling out details of tables)
$tables = array();
foreach ($dataFetcher as $row) {
$name = $this->cleanDelimitedIdentifiers($row[0]);
if ($name === $this->getMigrationTable()) {
continue;
}
$table = new Table($name);
$table->setIdMethod($database->getDefaultIdMethod());
$database->addTable($table);
$tables[] = $table;
}
// Now populate only columns.
foreach ($tables as $table) {
$this->addColumns($table);
}
// Now add indexes and constraints.
foreach ($tables as $table) {
$this->addForeignKeys($table);
$this->addIndexes($table);
$this->addPrimaryKey($table);
}
return count($tables);
}
示例4: parse
/**
*
*/
public function parse(Database $database)
{
$dataFetcher = $this->dbh->query("SELECT name FROM sqlite_master WHERE type='table' UNION ALL SELECT name FROM sqlite_temp_master WHERE type='table' ORDER BY name;");
// First load the tables (important that this happen before filling out details of tables)
$tables = array();
foreach ($dataFetcher as $row) {
$name = $row[0];
if ($name === $this->getMigrationTable()) {
continue;
}
$table = new Table($name);
$table->setIdMethod($database->getDefaultIdMethod());
$database->addTable($table);
$tables[] = $table;
}
// Now populate only columns.
foreach ($tables as $table) {
$this->addColumns($table);
}
// Now add indexes and constraints.
foreach ($tables as $table) {
$this->addIndexes($table);
}
return count($tables);
}
示例5: testTableNamespaceAndDbNamespace
public function testTableNamespaceAndDbNamespace()
{
$d = new Database('fooDb');
$d->setNamespace('Baz');
$t = new Table('fooTable');
$t->setNamespace('Foo\\Bar');
$d->addTable($t);
$builder = new TestableOMBuilder2($t);
$this->assertEquals('Baz\\Foo\\Bar', $builder->getNamespace(), 'Builder namespace is composed from the database and table namespaces when both are set');
}
示例6: parse
/**
* Parses a database schema.
*
* @param Database $database
* @return integer
*/
public function parse(Database $database)
{
$stmt = null;
$searchPath = '?';
$params = [$database->getSchema()];
if (!$database->getSchema()) {
$stmt = $this->dbh->query('SHOW search_path');
$searchPathString = $stmt->fetchColumn();
$params = [];
$searchPath = explode(',', $searchPathString);
foreach ($searchPath as &$path) {
$params[] = $path;
$path = '?';
}
$searchPath = implode(', ', $searchPath);
}
$stmt = $this->dbh->prepare("SELECT c.oid,\n c.relname, n.nspname\n FROM pg_class c join pg_namespace n on (c.relnamespace=n.oid)\n WHERE c.relkind = 'r'\n AND n.nspname NOT IN ('information_schema','pg_catalog')\n AND n.nspname NOT LIKE 'pg_temp%'\n AND n.nspname NOT LIKE 'pg_toast%'\n AND n.nspname IN ({$searchPath})\n ORDER BY relname");
$stmt->execute($params);
$tableWraps = array();
// First load the tables (important that this happen before filling out details of tables)
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
$name = $row['relname'];
$namespaceName = $row['nspname'];
if ($name == $this->getMigrationTable()) {
continue;
}
$oid = $row['oid'];
$table = new Table($name);
if ('public' !== $namespaceName) {
$table->setSchema($namespaceName);
}
$table->setIdMethod($database->getDefaultIdMethod());
$database->addTable($table);
// Create a wrapper to hold these tables and their associated OID
$wrap = new \stdClass();
$wrap->table = $table;
$wrap->oid = $oid;
$tableWraps[] = $wrap;
}
// Now populate only columns.
foreach ($tableWraps as $wrap) {
$this->addColumns($wrap->table, $wrap->oid);
}
// Now add indexes and constraints.
foreach ($tableWraps as $wrap) {
$this->addForeignKeys($wrap->table, $wrap->oid);
$this->addIndexes($wrap->table, $wrap->oid);
$this->addPrimaryKey($wrap->table, $wrap->oid);
}
$this->addSequences($database);
return count($tableWraps);
}
示例7: parse
/**
*
*/
public function parse(Database $database, Task $task = null)
{
$this->addVendorInfo = $this->getGeneratorConfig()->getBuildProperty('addVendorInfo');
$stmt = $this->dbh->query("SHOW FULL TABLES");
// First load the tables (important that this happen before filling out details of tables)
$tables = array();
if ($task) {
$task->log("Reverse Engineering Tables", Project::MSG_VERBOSE);
}
while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
$name = $row[0];
$type = $row[1];
if ($name == $this->getMigrationTable() || $type != "BASE TABLE") {
continue;
}
if ($task) {
$task->log(" Adding table '" . $name . "'", Project::MSG_VERBOSE);
}
$table = new Table($name);
$table->setIdMethod($database->getDefaultIdMethod());
$database->addTable($table);
$tables[] = $table;
}
// Now populate only columns.
if ($task) {
$task->log("Reverse Engineering Columns", Project::MSG_VERBOSE);
}
foreach ($tables as $table) {
if ($task) {
$task->log(" Adding columns for table '" . $table->getName() . "'", Project::MSG_VERBOSE);
}
$this->addColumns($table);
}
// Now add indices and constraints.
if ($task) {
$task->log("Reverse Engineering Indices And Constraints", Project::MSG_VERBOSE);
}
foreach ($tables as $table) {
if ($task) {
$task->log(" Adding indices and constraints for table '" . $table->getName() . "'", Project::MSG_VERBOSE);
}
$this->addForeignKeys($table);
$this->addIndexes($table);
$this->addPrimaryKey($table);
if ($this->addVendorInfo) {
$this->addTableVendorInfo($table);
}
}
return count($tables);
}
示例8: parse
/**
*
*/
public function parse(Database $database)
{
$stmt = $this->dbh->query('SELECT version() as ver');
$nativeVersion = $stmt->fetchColumn();
if (!$nativeVersion) {
throw new EngineException('Failed to get database version');
}
$arrVersion = sscanf($nativeVersion, '%*s %d.%d');
$version = sprintf('%d.%d', $arrVersion[0], $arrVersion[1]);
// Clean up
$stmt = null;
$stmt = $this->dbh->query("SELECT c.oid,\n c.relname, n.nspname\n FROM pg_class c join pg_namespace n on (c.relnamespace=n.oid)\n WHERE c.relkind = 'r'\n AND n.nspname NOT IN ('information_schema','pg_catalog')\n AND n.nspname NOT LIKE 'pg_temp%'\n AND n.nspname NOT LIKE 'pg_toast%'\n ORDER BY relname");
$tableWraps = array();
// First load the tables (important that this happen before filling out details of tables)
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
$name = $row['relname'];
$namespacename = $row['nspname'];
if ($name == $this->getMigrationTable()) {
continue;
}
$oid = $row['oid'];
$table = new Table($name);
if ($namespacename != 'public') {
$table->setSchema($namespacename);
}
$table->setIdMethod($database->getDefaultIdMethod());
$database->addTable($table);
// Create a wrapper to hold these tables and their associated OID
$wrap = new \stdClass();
$wrap->table = $table;
$wrap->oid = $oid;
$tableWraps[] = $wrap;
}
// Now populate only columns.
foreach ($tableWraps as $wrap) {
$this->addColumns($wrap->table, $wrap->oid, $version);
}
// Now add indexes and constraints.
foreach ($tableWraps as $wrap) {
$this->addForeignKeys($wrap->table, $wrap->oid, $version);
$this->addIndexes($wrap->table, $wrap->oid, $version);
$this->addPrimaryKey($wrap->table, $wrap->oid, $version);
}
// @TODO - Handle Sequences ...
return count($tableWraps);
}
示例9: parse
/**
*
*/
public function parse(Database $database)
{
$dataFetcher = $this->dbh->query("\n SELECT name\n FROM sqlite_master\n WHERE type='table'\n UNION ALL\n SELECT name\n FROM sqlite_temp_master\n WHERE type='table'\n ORDER BY name;");
// First load the tables (important that this happen before filling out details of tables)
$tables = array();
foreach ($dataFetcher as $row) {
$name = $row[0];
$commonName = '';
if ('sqlite_' == substr($name, 0, 7)) {
continue;
}
if ($database->getSchema()) {
if (false !== ($pos = strpos($name, '§'))) {
if ($database->getSchema()) {
if ($database->getSchema() !== substr($name, 0, $pos)) {
continue;
} else {
$commonName = substr($name, $pos + 2);
//2 because the delimiter § uses in UTF8 one byte more.
}
}
} else {
continue;
}
}
if ($name === $this->getMigrationTable()) {
continue;
}
$table = new Table($commonName ?: $name);
$table->setIdMethod($database->getDefaultIdMethod());
$database->addTable($table);
$tables[] = $table;
}
// Now populate only columns.
foreach ($tables as $table) {
$this->addColumns($table);
}
// Now add indexes and constraints.
foreach ($tables as $table) {
$this->addIndexes($table);
$this->addForeignKeys($table);
}
return count($tables);
}
示例10: parse
/**
* Searches for tables in the database. Maybe we want to search also the views.
* @param Database $database The Database model class to add tables to.
* @param Table[] $additionalTables
*/
public function parse(Database $database, array $additionalTables = array())
{
$tables = array();
$stmt = $this->dbh->query("SELECT OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE = 'TABLE'");
$seqPattern = $this->getGeneratorConfig()->get()['database']['adapters']['oracleAutoincrementSequencePattern'];
// First load the tables (important that this happen before filling out details of tables)
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
if (false !== strpos($row['OBJECT_NAME'], '$')) {
// this is an Oracle internal table or materialized view - prune
continue;
}
if (strtoupper($row['OBJECT_NAME']) === strtoupper($this->getMigrationTable())) {
continue;
}
$table = new Table($row['OBJECT_NAME']);
$table->setIdMethod($database->getDefaultIdMethod());
$database->addTable($table);
// Add columns, primary keys and indexes.
$this->addColumns($table);
$this->addPrimaryKey($table);
$this->addIndexes($table);
$pkColumns = $table->getPrimaryKey();
if (1 === count($pkColumns) && $seqPattern) {
$seqName = str_replace('${table}', $table->getName(), $seqPattern);
$seqName = strtoupper($seqName);
$stmt2 = $this->dbh->query("SELECT * FROM USER_SEQUENCES WHERE SEQUENCE_NAME = '" . $seqName . "'");
$hasSeq = $stmt2->fetch(\PDO::FETCH_ASSOC);
if ($hasSeq) {
$pkColumns[0]->setAutoIncrement(true);
$idMethodParameter = new IdMethodParameter();
$idMethodParameter->setValue($seqName);
$table->addIdMethodParameter($idMethodParameter);
}
}
$tables[] = $table;
}
foreach ($tables as $table) {
$this->addForeignKeys($table);
}
return count($tables);
}
示例11: parseTables
protected function parseTables(Database $database, Table $filterTable = null)
{
$sql = "\n SELECT name\n FROM sqlite_master\n WHERE type='table'\n %filter%\n UNION ALL\n SELECT name\n FROM sqlite_temp_master\n WHERE type='table'\n %filter%\n ORDER BY name;";
$filter = '';
if ($filterTable) {
if ($schema = $filterTable->getSchema()) {
$filter = sprintf(" AND name LIKE '%s§%%'", $schema);
}
$filter .= sprintf(" AND (name = '%s' OR name LIKE '%%§%1\$s')", $filterTable->getCommonName());
} else {
if ($schema = $database->getSchema()) {
$filter = sprintf(" AND name LIKE '%s§%%'", $schema);
}
}
$sql = str_replace('%filter%', $filter, $sql);
$dataFetcher = $this->dbh->query($sql);
// First load the tables (important that this happen before filling out details of tables)
foreach ($dataFetcher as $row) {
$tableName = $row[0];
$tableSchema = '';
if ('sqlite_' == substr($tableName, 0, 7)) {
continue;
}
if (false !== ($pos = strpos($tableName, '§'))) {
$tableSchema = substr($tableName, 0, $pos);
$tableName = substr($tableName, $pos + 2);
}
$table = new Table($tableName);
if ($filterTable && $filterTable->getSchema()) {
$table->setSchema($filterTable->getSchema());
} else {
if (!$database->getSchema() && $tableSchema) {
//we have no schema to filter, but this belongs to one, so next
continue;
}
}
if ($tableName === $this->getMigrationTable()) {
continue;
}
$table->setIdMethod($database->getDefaultIdMethod());
$database->addTable($table);
}
}
示例12: testTablePrefix
public function testTablePrefix()
{
$database = new Database();
$database->loadMapping(array('name' => 'bookstore', 'defaultIdMethod' => 'native', 'defaultPhpNamingMethod' => 'underscore', 'tablePrefix' => 'acme_', 'defaultStringFormat' => 'XML'));
$table = new Table();
$database->addTable($table);
$table->loadMapping(array('name' => 'books'));
$this->assertEquals('Books', $table->getPhpName());
$this->assertEquals('acme_books', $table->getCommonName());
}
示例13: testExcludedTablesWithRenaming
public function testExcludedTablesWithRenaming()
{
$dc = new DatabaseComparator();
$this->assertCount(0, $dc->getExcludedTables());
$dc->setExcludedTables(array('foo'));
$this->assertCount(1, $dc->getExcludedTables());
$d1 = new Database();
$d2 = new Database();
$t2 = new Table('Bar');
$d2->addTable($t2);
$diff = DatabaseComparator::computeDiff($d1, $d2, false, true, true, array('Bar'));
$this->assertFalse($diff);
$diff = DatabaseComparator::computeDiff($d1, $d2, false, true, true, array('Baz'));
$this->assertInstanceOf('Propel\\Generator\\Model\\Diff\\DatabaseDiff', $diff);
$d1 = new Database();
$t1 = new Table('Foo');
$d1->addTable($t1);
$d2 = new Database();
$t2 = new Table('Bar');
$d2->addTable($t2);
$diff = DatabaseComparator::computeDiff($d1, $d2, false, true, true, array('Bar', 'Foo'));
$this->assertFalse($diff);
$diff = DatabaseComparator::computeDiff($d1, $d2, false, true, true, array('Foo'));
$this->assertInstanceOf('Propel\\Generator\\Model\\Diff\\DatabaseDiff', $diff);
$diff = DatabaseComparator::computeDiff($d1, $d2, false, true, true, array('Bar'));
$this->assertInstanceOf('Propel\\Generator\\Model\\Diff\\DatabaseDiff', $diff);
$d1 = new Database();
$t1 = new Table('Foo');
$c1 = new Column('col1');
$t1->addColumn($c1);
$d1->addTable($t1);
$d2 = new Database();
$t2 = new Table('Foo');
$d2->addTable($t2);
$diff = DatabaseComparator::computeDiff($d1, $d2, false, true, true, array('Bar', 'Foo'));
$this->assertFalse($diff);
$diff = DatabaseComparator::computeDiff($d1, $d2, false, true, true, array('Bar'));
$this->assertInstanceOf('Propel\\Generator\\Model\\Diff\\DatabaseDiff', $diff);
}
示例14: testCompareSeveralTableDifferences
public function testCompareSeveralTableDifferences()
{
$d1 = new Database();
$t1 = new Table('Foo_Table');
$c1 = new Column('Foo');
$c1->getDomain()->copy($this->platform->getDomainForType('DOUBLE'));
$c1->getDomain()->replaceScale(2);
$c1->getDomain()->replaceSize(3);
$c1->setNotNull(true);
$c1->getDomain()->setDefaultValue(new ColumnDefaultValue(123, ColumnDefaultValue::TYPE_VALUE));
$t1->addColumn($c1);
$d1->addTable($t1);
$t2 = new Table('Bar');
$c2 = new Column('Bar_Column');
$c2->getDomain()->copy($this->platform->getDomainForType('DOUBLE'));
$t2->addColumn($c2);
$d1->addTable($t2);
$t11 = new Table('Baz');
$d1->addTable($t11);
$d2 = new Database();
$t3 = new Table('Foo_Table');
$c3 = new Column('Foo1');
$c3->getDomain()->copy($this->platform->getDomainForType('DOUBLE'));
$c3->getDomain()->replaceScale(2);
$c3->getDomain()->replaceSize(3);
$c3->setNotNull(true);
$c3->getDomain()->setDefaultValue(new ColumnDefaultValue(123, ColumnDefaultValue::TYPE_VALUE));
$t3->addColumn($c3);
$d2->addTable($t3);
$t4 = new Table('Bar2');
$c4 = new Column('Bar_Column');
$c4->getDomain()->copy($this->platform->getDomainForType('DOUBLE'));
$t4->addColumn($c4);
$d2->addTable($t4);
$t5 = new Table('Biz');
$c5 = new Column('Biz_Column');
$c5->getDomain()->copy($this->platform->getDomainForType('INTEGER'));
$t5->addColumn($c5);
$d2->addTable($t5);
// Foo_Table was modified, Bar was renamed, Baz was removed, Biz was added
$dc = new DatabaseComparator();
$dc->setFromDatabase($d1);
$dc->setToDatabase($d2);
$nbDiffs = $dc->compareTables();
$databaseDiff = $dc->getDatabaseDiff();
$this->assertEquals(4, $nbDiffs);
$this->assertEquals(array('Bar' => 'Bar2'), $databaseDiff->getRenamedTables());
$this->assertEquals(array('Biz' => $t5), $databaseDiff->getAddedTables());
$this->assertEquals(array('Baz' => $t11), $databaseDiff->getRemovedTables());
$tableDiff = TableComparator::computeDiff($t1, $t3);
$this->assertEquals(array('Foo_Table' => $tableDiff), $databaseDiff->getModifiedTables());
}
示例15: parseTables
protected function parseTables(&$tableWraps, Database $database, Table $filterTable = null)
{
$stmt = null;
$params = [];
$sql = "\n SELECT c.oid, c.relname, n.nspname\n FROM pg_class c join pg_namespace n on (c.relnamespace=n.oid)\n WHERE c.relkind = 'r'\n AND n.nspname NOT IN ('information_schema','pg_catalog')\n AND n.nspname NOT LIKE 'pg_temp%'\n AND n.nspname NOT LIKE 'pg_toast%'";
if ($filterTable) {
if ($schema = $filterTable->getSchema()) {
$sql .= ' AND n.nspname = ?';
$params[] = $schema;
}
$sql .= ' AND c.relname = ?';
$params[] = $filterTable->getCommonName();
} else {
if (!$database->getSchema()) {
$stmt = $this->dbh->query('SELECT current_schemas(false)');
$searchPathString = substr($stmt->fetchColumn(), 1, -1);
$params = [];
$searchPath = explode(',', $searchPathString);
foreach ($searchPath as &$path) {
$params[] = $path;
$path = '?';
}
$searchPath = implode(', ', $searchPath);
$sql .= "\n AND n.nspname IN ({$searchPath})";
} elseif ($database->getSchema()) {
$sql .= "\n AND n.nspname = ?";
$params[] = $database->getSchema();
}
}
$sql .= "\n ORDER BY relname";
$stmt = $this->dbh->prepare($sql);
$stmt->execute($params);
// First load the tables (important that this happen before filling out details of tables)
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
$name = $row['relname'];
$namespaceName = $row['nspname'];
if ($name == $this->getMigrationTable()) {
continue;
}
$oid = $row['oid'];
$table = new Table($name);
if ('public' !== $namespaceName) {
$table->setSchema($namespaceName);
}
$table->setIdMethod($database->getDefaultIdMethod());
$database->addTable($table);
// Create a wrapper to hold these tables and their associated OID
$wrap = new \stdClass();
$wrap->table = $table;
$wrap->oid = $oid;
$tableWraps[] = $wrap;
}
}