From 389c28f886d646c006d110dcf1e69ac6870ae7ca Mon Sep 17 00:00:00 2001 From: Maxim Smakouz Date: Wed, 1 Nov 2023 20:52:07 +0200 Subject: [PATCH 1/6] Add the ability to configure foreign keys --- src/Definition/Entity.php | 15 +++ src/Definition/ForeignKey.php | 114 ++++++++++++++++++ src/Definition/Map/ForeignKeyMap.php | 69 +++++++++++ src/Generator/ForeignKeys.php | 26 ++++ tests/Schema/Definition/ForeignKeyTest.php | 53 ++++++++ .../Definition/Map/ForeignKeyMapTest.php | 82 +++++++++++++ tests/Schema/Driver/MySQL/ForeignKeyTest.php | 12 ++ .../Driver/Postgres/ForeignKeysTest.php | 12 ++ .../Driver/SQLServer/ForeignKeyTest.php | 12 ++ .../Schema/Driver/SQLite/ForeignKeysTest.php | 12 ++ tests/Schema/EntityTest.php | 17 +++ tests/Schema/Generator/ForeignKeysTest.php | 55 +++++++++ 12 files changed, 479 insertions(+) create mode 100644 src/Definition/ForeignKey.php create mode 100644 src/Definition/Map/ForeignKeyMap.php create mode 100644 src/Generator/ForeignKeys.php create mode 100644 tests/Schema/Definition/ForeignKeyTest.php create mode 100644 tests/Schema/Definition/Map/ForeignKeyMapTest.php create mode 100644 tests/Schema/Driver/MySQL/ForeignKeyTest.php create mode 100644 tests/Schema/Driver/Postgres/ForeignKeysTest.php create mode 100644 tests/Schema/Driver/SQLServer/ForeignKeyTest.php create mode 100644 tests/Schema/Driver/SQLite/ForeignKeysTest.php create mode 100644 tests/Schema/Generator/ForeignKeysTest.php diff --git a/src/Definition/Entity.php b/src/Definition/Entity.php index 7b73e0e..3de43f2 100644 --- a/src/Definition/Entity.php +++ b/src/Definition/Entity.php @@ -9,6 +9,7 @@ use Cycle\ORM\Select\ScopeInterface; use Cycle\ORM\Select\SourceInterface; use Cycle\Schema\Definition\Map\FieldMap; +use Cycle\Schema\Definition\Map\ForeignKeyMap; use Cycle\Schema\Definition\Map\OptionMap; use Cycle\Schema\Definition\Map\RelationMap; use Cycle\Schema\Exception\EntityException; @@ -78,6 +79,7 @@ final class Entity private ?Inheritance $inheritance = null; /** @var class-string|null */ private ?string $stiParent = null; + private ForeignKeyMap $foreignKeys; public function __construct() { @@ -85,6 +87,7 @@ public function __construct() $this->fields = new FieldMap(); $this->primaryFields = new FieldMap(); $this->relations = new RelationMap(); + $this->foreignKeys = new ForeignKeyMap(); } /** @@ -96,6 +99,7 @@ public function __clone() $this->fields = clone $this->fields; $this->primaryFields = clone $this->primaryFields; $this->relations = clone $this->relations; + $this->foreignKeys = clone $this->foreignKeys; } public function getOptions(): OptionMap @@ -241,6 +245,11 @@ public function getRelations(): RelationMap return $this->relations; } + public function getForeignKeys(): ForeignKeyMap + { + return $this->foreignKeys; + } + public function addSchemaModifier(SchemaModifierInterface $modifier): self { $this->schemaModifiers[] = $modifier; @@ -284,6 +293,12 @@ public function merge(self $entity): void $this->fields->set($name, $field); } } + + foreach ($entity->getForeignKeys() as $foreignKey) { + if (!$this->foreignKeys->has($foreignKey)) { + $this->foreignKeys->set($foreignKey); + } + } } /** diff --git a/src/Definition/ForeignKey.php b/src/Definition/ForeignKey.php new file mode 100644 index 0000000..0084629 --- /dev/null +++ b/src/Definition/ForeignKey.php @@ -0,0 +1,114 @@ + + */ + private array $innerColumns; + + /** + * @var array + */ + private array $outerColumns; + + private bool $createIndex; + + /** + * @var non-empty-string + */ + private string $action; + + /** + * @param non-empty-string $table + */ + public function setTable(string $table): self + { + $this->table = $table; + + return $this; + } + + /** + * @return non-empty-string + */ + public function getTable(): string + { + return $this->table; + } + + /** + * @param array $columns + */ + public function setInnerColumns(array $columns): self + { + $this->innerColumns = $columns; + + return $this; + } + + /** + * @return array + */ + public function getInnerColumns(): array + { + return $this->innerColumns; + } + + /** + * @param array $columns + */ + public function setOuterColumns(array $columns): self + { + $this->outerColumns = $columns; + + return $this; + } + + /** + * @return array + */ + public function getOuterColumns(): array + { + return $this->outerColumns; + } + + public function createIndex(bool $createIndex = true): self + { + $this->createIndex = $createIndex; + + return $this; + } + + public function isCreateIndex(): bool + { + return $this->createIndex; + } + + /** + * @param non-empty-string $action + */ + public function setAction(string $action): self + { + $this->action = $action; + + return $this; + } + + /** + * @return non-empty-string + */ + public function getAction(): string + { + return $this->action; + } +} diff --git a/src/Definition/Map/ForeignKeyMap.php b/src/Definition/Map/ForeignKeyMap.php new file mode 100644 index 0000000..8374fb1 --- /dev/null +++ b/src/Definition/Map/ForeignKeyMap.php @@ -0,0 +1,69 @@ + + */ +final class ForeignKeyMap implements \IteratorAggregate, \Countable +{ + /** + * @var array + */ + private array $foreignKeys = []; + + /** + * Cloning. + */ + public function __clone() + { + foreach ($this->foreignKeys as $index => $foreignKey) { + $this->foreignKeys[$index] = clone $foreignKey; + } + } + + public function has(ForeignKey $foreignKey): bool + { + return isset($this->foreignKeys[$this->generateIdentifier($foreignKey)]); + } + + public function set(ForeignKey $foreignKey): self + { + $this->foreignKeys[$this->generateIdentifier($foreignKey)] = $foreignKey; + + return $this; + } + + public function remove(ForeignKey $foreignKey): self + { + unset($this->foreignKeys[$this->generateIdentifier($foreignKey)]); + + return $this; + } + + public function count(): int + { + return \count($this->foreignKeys); + } + + public function getIterator(): \Traversable + { + return new \ArrayIterator($this->foreignKeys); + } + + private function generateIdentifier(ForeignKey $foreignKey): string + { + return \sprintf( + '%s:%s:%s', + $foreignKey->getTable(), + \implode(',', $foreignKey->getInnerColumns()), + \implode(',', $foreignKey->getOuterColumns()) + ); + } +} diff --git a/src/Generator/ForeignKeys.php b/src/Generator/ForeignKeys.php new file mode 100644 index 0000000..323a9ed --- /dev/null +++ b/src/Generator/ForeignKeys.php @@ -0,0 +1,26 @@ +getForeignKeys() as $fk) { + $registry->getTableSchema($entity) + ->foreignKey($fk->getInnerColumns(), $fk->isCreateIndex()) + ->references($fk->getTable(), $fk->getOuterColumns()) + ->onUpdate($fk->getAction()) + ->onDelete($fk->getAction()); + } + } + + return $registry; + } +} diff --git a/tests/Schema/Definition/ForeignKeyTest.php b/tests/Schema/Definition/ForeignKeyTest.php new file mode 100644 index 0000000..2e03c95 --- /dev/null +++ b/tests/Schema/Definition/ForeignKeyTest.php @@ -0,0 +1,53 @@ +setTable('table'); + $this->assertSame('table', $key->getTable()); + } + + public function testInnerColumns(): void + { + $key = new ForeignKey(); + + $key->setInnerColumns(['field']); + $this->assertSame(['field'], $key->getInnerColumns()); + } + + public function testOuterColumns(): void + { + $key = new ForeignKey(); + + $key->setOuterColumns(['field']); + $this->assertSame(['field'], $key->getOuterColumns()); + } + + public function testIndex(): void + { + $key = new ForeignKey(); + + $key->createIndex(true); + $this->assertTrue($key->isCreateIndex()); + $key->createIndex(false); + $this->assertFalse($key->isCreateIndex()); + } + + public function testAction(): void + { + $key = new ForeignKey(); + + $key->setAction('CASCADE'); + $this->assertSame('CASCADE', $key->getAction()); + } +} diff --git a/tests/Schema/Definition/Map/ForeignKeyMapTest.php b/tests/Schema/Definition/Map/ForeignKeyMapTest.php new file mode 100644 index 0000000..0d272c6 --- /dev/null +++ b/tests/Schema/Definition/Map/ForeignKeyMapTest.php @@ -0,0 +1,82 @@ +assertSame([], \iterator_to_array($map->getIterator())); + } + + public function testHas(): void + { + $key = new ForeignKey(); + $key->setTable('table'); + $key->setInnerColumns(['field']); + $key->setOuterColumns(['field']); + + $map = new ForeignKeyMap(); + + $this->assertFalse($map->has($key)); + + $map->set($key); + $this->assertTrue($map->has($key)); + } + + public function testSet(): void + { + $key = new ForeignKey(); + $key->setTable('table'); + $key->setInnerColumns(['field']); + $key->setOuterColumns(['field']); + + $map = new ForeignKeyMap(); + + $this->assertFalse($map->has($key)); + + $map->set($key); + $this->assertSame(['table:field:field' => $key], \iterator_to_array($map->getIterator())); + } + + public function testRemove(): void + { + $key = new ForeignKey(); + $key->setTable('table'); + $key->setInnerColumns(['field']); + $key->setOuterColumns(['field']); + + $map = new ForeignKeyMap(); + + $this->assertFalse($map->has($key)); + + $map->set($key); + $this->assertTrue($map->has($key)); + + $map->remove($key); + $this->assertFalse($map->has($key)); + } + + public function testCount(): void + { + $key = new ForeignKey(); + $key->setTable('table'); + $key->setInnerColumns(['field']); + $key->setOuterColumns(['field']); + + $map = new ForeignKeyMap(); + + $this->assertSame(0, $map->count()); + + $map->set($key); + $this->assertSame(1, $map->count()); + } +} diff --git a/tests/Schema/Driver/MySQL/ForeignKeyTest.php b/tests/Schema/Driver/MySQL/ForeignKeyTest.php new file mode 100644 index 0000000..321553e --- /dev/null +++ b/tests/Schema/Driver/MySQL/ForeignKeyTest.php @@ -0,0 +1,12 @@ +assertFalse($e->getFields()->has('id')); } + public function testForeignKeys(): void + { + $entity = new Entity(); + + $key = new ForeignKey(); + $key->setTable('table'); + $key->setInnerColumns(['field']); + $key->setOuterColumns(['field']); + + $entity->getForeignKeys()->set($key); + + $this->assertTrue($entity->getForeignKeys()->has($key)); + $entity->getForeignKeys()->remove($key); + $this->assertFalse($entity->getForeignKeys()->has($key)); + } + public function testPrimaryFields(): void { $e = new Entity(); diff --git a/tests/Schema/Generator/ForeignKeysTest.php b/tests/Schema/Generator/ForeignKeysTest.php new file mode 100644 index 0000000..6361ca4 --- /dev/null +++ b/tests/Schema/Generator/ForeignKeysTest.php @@ -0,0 +1,55 @@ +dbal); + $registry->register($author)->linkTable($author, 'default', 'authors'); + $registry->register($user)->linkTable($user, 'default', 'users'); + $registry->register($plain)->linkTable($plain, 'default', 'plain'); + + $this->assertSame([], $registry->getTableSchema($author)->getForeignKeys()); + + $fk = new ForeignKey(); + $fk->setTable('users'); + $fk->setInnerColumns(['id']); + $fk->setOuterColumns(['id']); + $fk->setAction('CASCADE'); + $fk->createIndex(true); + + $author->getForeignKeys()->set($fk); + + $compiler = new Compiler(); + $compiler->compile($registry, [new RenderTables(), new ForeignKeys()]); + + $foreignKeys = $registry->getTableSchema($author)->getForeignKeys(); + $expectedFk = array_shift($foreignKeys); + + $this->assertTrue(\str_contains($expectedFk->getTable(), 'authors')); + $this->assertTrue(\str_contains($expectedFk->getForeignTable(), 'users')); + $this->assertSame(['id'], $expectedFk->getColumns()); + $this->assertSame(['id'], $expectedFk->getForeignKeys()); + $this->assertSame('CASCADE', $expectedFk->getDeleteRule()); + $this->assertSame('CASCADE', $expectedFk->getUpdateRule()); + $this->assertTrue($expectedFk->hasIndex()); + } +} From 3ffeb5c96431ee881e54a418054da236bfa41b3b Mon Sep 17 00:00:00 2001 From: StyleCI Bot Date: Wed, 1 Nov 2023 18:52:28 +0000 Subject: [PATCH 2/6] Apply fixes from StyleCI --- tests/Schema/Definition/ForeignKeyTest.php | 2 +- tests/Schema/Driver/MySQL/ForeignKeyTest.php | 2 +- tests/Schema/Driver/SQLServer/ForeignKeyTest.php | 2 +- tests/Schema/Generator/ForeignKeysTest.php | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/Schema/Definition/ForeignKeyTest.php b/tests/Schema/Definition/ForeignKeyTest.php index 2e03c95..2316d48 100644 --- a/tests/Schema/Definition/ForeignKeyTest.php +++ b/tests/Schema/Definition/ForeignKeyTest.php @@ -7,7 +7,7 @@ use Cycle\Schema\Definition\ForeignKey; use PHPUnit\Framework\TestCase; -final class ForeignKeyMapTest extends TestCase +final class ForeignKeyTest extends TestCase { public function testTable(): void { diff --git a/tests/Schema/Driver/MySQL/ForeignKeyTest.php b/tests/Schema/Driver/MySQL/ForeignKeyTest.php index 321553e..be39464 100644 --- a/tests/Schema/Driver/MySQL/ForeignKeyTest.php +++ b/tests/Schema/Driver/MySQL/ForeignKeyTest.php @@ -6,7 +6,7 @@ use Cycle\Schema\Tests\Generator\ForeignKeysTest as BaseTest; -final class ForeignKeysTest extends BaseTest +final class ForeignKeyTest extends BaseTest { public const DRIVER = 'mysql'; } diff --git a/tests/Schema/Driver/SQLServer/ForeignKeyTest.php b/tests/Schema/Driver/SQLServer/ForeignKeyTest.php index 66bb89e..16377e9 100644 --- a/tests/Schema/Driver/SQLServer/ForeignKeyTest.php +++ b/tests/Schema/Driver/SQLServer/ForeignKeyTest.php @@ -6,7 +6,7 @@ use Cycle\Schema\Tests\Generator\ForeignKeysTest as BaseTest; -final class ForeignKeysTest extends BaseTest +final class ForeignKeyTest extends BaseTest { public const DRIVER = 'sqlserver'; } diff --git a/tests/Schema/Generator/ForeignKeysTest.php b/tests/Schema/Generator/ForeignKeysTest.php index 6361ca4..54c8ee7 100644 --- a/tests/Schema/Generator/ForeignKeysTest.php +++ b/tests/Schema/Generator/ForeignKeysTest.php @@ -44,8 +44,8 @@ public function testTableSchemaShouldBeModified(): void $foreignKeys = $registry->getTableSchema($author)->getForeignKeys(); $expectedFk = array_shift($foreignKeys); - $this->assertTrue(\str_contains($expectedFk->getTable(), 'authors')); - $this->assertTrue(\str_contains($expectedFk->getForeignTable(), 'users')); + $this->assertStringContainsString('authors', $expectedFk->getTable()); + $this->assertStringContainsString('users', $expectedFk->getForeignTable()); $this->assertSame(['id'], $expectedFk->getColumns()); $this->assertSame(['id'], $expectedFk->getForeignKeys()); $this->assertSame('CASCADE', $expectedFk->getDeleteRule()); From e44ffedf4d5f47f6cf36924908854ecba46c8b92 Mon Sep 17 00:00:00 2001 From: Maxim Smakouz Date: Wed, 1 Nov 2023 20:53:37 +0200 Subject: [PATCH 3/6] Remove pdo_sqlsrv version --- .github/workflows/ci-mssql.yml | 2 +- .github/workflows/main.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-mssql.yml b/.github/workflows/ci-mssql.yml index ef43e8f..7d20ede 100644 --- a/.github/workflows/ci-mssql.yml +++ b/.github/workflows/ci-mssql.yml @@ -28,7 +28,7 @@ jobs: extensions: pdo, pdo_sqlsrv mssql: 'server:2019-latest' - php: '8.1' - extensions: pdo, pdo_sqlsrv-5.10.0beta2 + extensions: pdo, pdo_sqlsrv mssql: 'server:2019-latest' services: diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b43e388..43016d3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,7 +29,7 @@ jobs: php-version: ${{ matrix.php-versions }} coverage: pcov tools: pecl - extensions: mbstring, pdo, pdo_sqlite, pdo_pgsql, pdo_sqlsrv-5.10.0beta2, pdo_mysql + extensions: mbstring, pdo, pdo_sqlite, pdo_pgsql, pdo_sqlsrv, pdo_mysql - name: Get Composer Cache Directory id: composer-cache run: echo "::set-output name=dir::$(composer config cache-files-dir)" From fc52c7f78bc5adc889279752d85ac050d6a9350b Mon Sep 17 00:00:00 2001 From: Maxim Smakouz Date: Wed, 1 Nov 2023 20:58:58 +0200 Subject: [PATCH 4/6] Add return phpdoc --- src/Definition/Map/ForeignKeyMap.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Definition/Map/ForeignKeyMap.php b/src/Definition/Map/ForeignKeyMap.php index 8374fb1..0b392c1 100644 --- a/src/Definition/Map/ForeignKeyMap.php +++ b/src/Definition/Map/ForeignKeyMap.php @@ -57,6 +57,9 @@ public function getIterator(): \Traversable return new \ArrayIterator($this->foreignKeys); } + /** + * @return non-empty-string + */ private function generateIdentifier(ForeignKey $foreignKey): string { return \sprintf( From 85b107e1d6b8af26a1f59d4fb8d164514c3b865d Mon Sep 17 00:00:00 2001 From: Maxim Smakouz Date: Thu, 2 Nov 2023 15:36:15 +0200 Subject: [PATCH 5/6] Add index on outer columns --- src/Definition/ForeignKey.php | 18 +++++++++++++----- src/Definition/Map/ForeignKeyMap.php | 2 +- src/Generator/ForeignKeys.php | 8 +++++++- tests/Schema/Definition/ForeignKeyTest.php | 6 +++--- .../Definition/Map/ForeignKeyMapTest.php | 10 +++++----- tests/Schema/EntityTest.php | 2 +- tests/Schema/Generator/ForeignKeysTest.php | 2 +- 7 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/Definition/ForeignKey.php b/src/Definition/ForeignKey.php index 0084629..bc10211 100644 --- a/src/Definition/ForeignKey.php +++ b/src/Definition/ForeignKey.php @@ -6,6 +6,11 @@ final class ForeignKey { + /** + * @var non-empty-string + */ + private string $target; + /** * @var non-empty-string */ @@ -29,11 +34,11 @@ final class ForeignKey private string $action; /** - * @param non-empty-string $table + * @param non-empty-string $target */ - public function setTable(string $table): self + public function setTarget(string $target): self { - $this->table = $table; + $this->target = $target; return $this; } @@ -41,9 +46,9 @@ public function setTable(string $table): self /** * @return non-empty-string */ - public function getTable(): string + public function getTarget(): string { - return $this->table; + return $this->target; } /** @@ -82,6 +87,9 @@ public function getOuterColumns(): array return $this->outerColumns; } + /** + * Create an index on innerKey. + */ public function createIndex(bool $createIndex = true): self { $this->createIndex = $createIndex; diff --git a/src/Definition/Map/ForeignKeyMap.php b/src/Definition/Map/ForeignKeyMap.php index 0b392c1..185a610 100644 --- a/src/Definition/Map/ForeignKeyMap.php +++ b/src/Definition/Map/ForeignKeyMap.php @@ -64,7 +64,7 @@ private function generateIdentifier(ForeignKey $foreignKey): string { return \sprintf( '%s:%s:%s', - $foreignKey->getTable(), + $foreignKey->getTarget(), \implode(',', $foreignKey->getInnerColumns()), \implode(',', $foreignKey->getOuterColumns()) ); diff --git a/src/Generator/ForeignKeys.php b/src/Generator/ForeignKeys.php index 323a9ed..12f6e84 100644 --- a/src/Generator/ForeignKeys.php +++ b/src/Generator/ForeignKeys.php @@ -13,9 +13,15 @@ public function run(Registry $registry): Registry { foreach ($registry as $entity) { foreach ($entity->getForeignKeys() as $fk) { + $target = $registry->getEntity($fk->getTarget()); + + if (!$registry->getTableSchema($target)->hasIndex($fk->getOuterColumns())) { + $registry->getTableSchema($target)->index($fk->getOuterColumns())->unique(); + } + $registry->getTableSchema($entity) ->foreignKey($fk->getInnerColumns(), $fk->isCreateIndex()) - ->references($fk->getTable(), $fk->getOuterColumns()) + ->references($registry->getTable($target), $fk->getOuterColumns()) ->onUpdate($fk->getAction()) ->onDelete($fk->getAction()); } diff --git a/tests/Schema/Definition/ForeignKeyTest.php b/tests/Schema/Definition/ForeignKeyTest.php index 2316d48..1361e29 100644 --- a/tests/Schema/Definition/ForeignKeyTest.php +++ b/tests/Schema/Definition/ForeignKeyTest.php @@ -9,12 +9,12 @@ final class ForeignKeyTest extends TestCase { - public function testTable(): void + public function testTarget(): void { $key = new ForeignKey(); - $key->setTable('table'); - $this->assertSame('table', $key->getTable()); + $key->setTarget('foo'); + $this->assertSame('foo', $key->getTarget()); } public function testInnerColumns(): void diff --git a/tests/Schema/Definition/Map/ForeignKeyMapTest.php b/tests/Schema/Definition/Map/ForeignKeyMapTest.php index 0d272c6..8f9d707 100644 --- a/tests/Schema/Definition/Map/ForeignKeyMapTest.php +++ b/tests/Schema/Definition/Map/ForeignKeyMapTest.php @@ -20,7 +20,7 @@ public function testEmptyForeignKeys(): void public function testHas(): void { $key = new ForeignKey(); - $key->setTable('table'); + $key->setTarget('foo'); $key->setInnerColumns(['field']); $key->setOuterColumns(['field']); @@ -35,7 +35,7 @@ public function testHas(): void public function testSet(): void { $key = new ForeignKey(); - $key->setTable('table'); + $key->setTarget('foo'); $key->setInnerColumns(['field']); $key->setOuterColumns(['field']); @@ -44,13 +44,13 @@ public function testSet(): void $this->assertFalse($map->has($key)); $map->set($key); - $this->assertSame(['table:field:field' => $key], \iterator_to_array($map->getIterator())); + $this->assertSame(['foo:field:field' => $key], \iterator_to_array($map->getIterator())); } public function testRemove(): void { $key = new ForeignKey(); - $key->setTable('table'); + $key->setTarget('foo'); $key->setInnerColumns(['field']); $key->setOuterColumns(['field']); @@ -68,7 +68,7 @@ public function testRemove(): void public function testCount(): void { $key = new ForeignKey(); - $key->setTable('table'); + $key->setTarget('foo'); $key->setInnerColumns(['field']); $key->setOuterColumns(['field']); diff --git a/tests/Schema/EntityTest.php b/tests/Schema/EntityTest.php index a4037b7..29a1765 100644 --- a/tests/Schema/EntityTest.php +++ b/tests/Schema/EntityTest.php @@ -63,7 +63,7 @@ public function testForeignKeys(): void $entity = new Entity(); $key = new ForeignKey(); - $key->setTable('table'); + $key->setTarget('foo'); $key->setInnerColumns(['field']); $key->setOuterColumns(['field']); diff --git a/tests/Schema/Generator/ForeignKeysTest.php b/tests/Schema/Generator/ForeignKeysTest.php index 54c8ee7..af98cb9 100644 --- a/tests/Schema/Generator/ForeignKeysTest.php +++ b/tests/Schema/Generator/ForeignKeysTest.php @@ -30,7 +30,7 @@ public function testTableSchemaShouldBeModified(): void $this->assertSame([], $registry->getTableSchema($author)->getForeignKeys()); $fk = new ForeignKey(); - $fk->setTable('users'); + $fk->setTarget('user'); $fk->setInnerColumns(['id']); $fk->setOuterColumns(['id']); $fk->setAction('CASCADE'); From f2bb135522ff53bfed8f940f9008d46aa80aa2aa Mon Sep 17 00:00:00 2001 From: Maxim Smakouz Date: Thu, 2 Nov 2023 15:37:13 +0200 Subject: [PATCH 6/6] Remove unused property --- src/Definition/ForeignKey.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/Definition/ForeignKey.php b/src/Definition/ForeignKey.php index bc10211..97efc1c 100644 --- a/src/Definition/ForeignKey.php +++ b/src/Definition/ForeignKey.php @@ -11,11 +11,6 @@ final class ForeignKey */ private string $target; - /** - * @var non-empty-string - */ - private string $table; - /** * @var array */