1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
<?php
namespace Doctrine\DBAL\Tests\SQL\Builder;
use Doctrine\DBAL\Schema\AbstractSchemaManager;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\DBAL\Tests\FunctionalTestCase;
use function strtolower;
class CreateAndDropSchemaObjectsSQLBuilderTest extends FunctionalTestCase
{
public function testCreateAndDropTablesWithCircularForeignKeys(): void
{
$schema = new Schema();
$this->createTable($schema, 't1', 't2');
$this->createTable($schema, 't2', 't1');
$schemaManager = $this->connection->createSchemaManager();
$schemaManager->createSchemaObjects($schema);
$this->introspectForeignKey($schemaManager, 't1', 't2');
$this->introspectForeignKey($schemaManager, 't2', 't1');
$schemaManager->dropSchemaObjects($schema);
self::assertFalse($schemaManager->tablesExist(['t1']));
self::assertFalse($schemaManager->tablesExist(['t2']));
}
private function createTable(Schema $schema, string $name, string $otherName): void
{
$table = $schema->createTable($name);
$table->addColumn('id', 'integer');
$table->addColumn($otherName . '_id', 'integer');
$table->setPrimaryKey(['id']);
$table->addForeignKeyConstraint($otherName, [$otherName . '_id'], ['id']);
}
private function introspectForeignKey(
AbstractSchemaManager $schemaManager,
string $tableName,
string $expectedForeignTableName
): void {
$foreignKeys = $schemaManager->listTableForeignKeys($tableName);
self::assertCount(1, $foreignKeys);
self::assertSame($expectedForeignTableName, strtolower($foreignKeys[0]->getForeignTableName()));
}
}
|