Details
Description
Given two databases, 'foo' and 'bar', with entities in /Entities/Foo/ annotated as follows:
/** * Test * * @Table(name="foo.test") * @Entity */
Create an EntityManager instance with
$connectionOptions = array(
'dbname' => 'Foo',
'driver' => 'pdo_mysql',
<..etc..>
);
Use EntityManager#getClassMetaData( "Entities\\Foo
Test" ) to pass to SchemaTool#createSchema() and Doctrine appropriately creates a database table foo.test
Use EntityManager#getClassMetaData( "Entities\\Foo
Test" ) to pass to SchemaTool#updateSchema() and Doctrine fails with Exception
-> SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'test' already exists
Inserting
die( print_r( $fromSchema, 1 ) . print_r( $toSchema, 1 ) . print_r( $schemaDiff, 1 ) );
into Doctrine/ORM/Tools/SchemaTool.php line 632 shows $fromSchema outputs
[_tables:protected] => Array
(
[test]
but $toSchema outputs
[_tables:protected] => Array
(
[foo.test]
which causes $schemaDiff to output
[newTables] => Array
(
[foo.test]
In summary, Doctrine/DBAL/Schema/Comparator considers foo.test a new table, because Doctrine/DBAL/Schema/AbstractSchemaManager lists its table as "test" rather than "foo.test".
Multi databases are not supported by schema manager and schema tool yet.