Skip to content

Commit

Permalink
Fix SchemaTool::getSchemaFromMetadata() uniqueConstraint without a pr…
Browse files Browse the repository at this point in the history
…edefined name (#11314)

* Fix loading SchemaTool::getSchemaFromMetadata() uniqueConstraint without a name

Fixes a type miss-match exception when reading a UniqueConstraint defined on an Entity which doesn't have a predefined name.

* Fix deprecation on DBAL 3

---------

Co-authored-by: Alexander M. Turek <me@derrabus.de>
  • Loading branch information
rmotaln and derrabus committed Mar 3, 2024
1 parent 52a6a21 commit ab5e9e3
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/Tools/SchemaTool.php
Expand Up @@ -365,7 +365,7 @@ static function (ClassMetadata $class) use ($idMapping): bool {

if (isset($class->table['uniqueConstraints'])) {
foreach ($class->table['uniqueConstraints'] as $indexName => $indexData) {
$uniqIndex = new Index($indexName, $this->getIndexColumns($class, $indexData), true, false, [], $indexData['options'] ?? []);
$uniqIndex = new Index('tmp__' . $indexName, $this->getIndexColumns($class, $indexData), true, false, [], $indexData['options'] ?? []);

foreach ($table->getIndexes() as $tableIndexName => $tableIndex) {
$method = method_exists($tableIndex, 'isFulfilledBy') ? 'isFulfilledBy' : 'isFullfilledBy';
Expand Down
47 changes: 47 additions & 0 deletions tests/Tests/ORM/Tools/SchemaToolTest.php
Expand Up @@ -374,6 +374,27 @@ public function testConfigurationSchemaIgnoredEntity(): void
self::assertTrue($schema->hasTable('first_entity'), 'Table first_entity should exist.');
self::assertFalse($schema->hasTable('second_entity'), 'Table second_entity should not exist.');
}

#[Group('11314')]
public function testLoadUniqueConstraintWithoutName(): void
{
$em = $this->getTestEntityManager();
$entity = $em->getClassMetadata(GH11314Entity::class);

$schemaTool = new SchemaTool($em);
$schema = $schemaTool->getSchemaFromMetadata([$entity]);

self::assertTrue($schema->hasTable('GH11314Entity'));

$tableEntity = $schema->getTable('GH11314Entity');

self::assertTrue($tableEntity->hasIndex('uniq_2d81a3ed5bf54558875f7fd5'));

$tableIndex = $tableEntity->getIndex('uniq_2d81a3ed5bf54558875f7fd5');

self::assertTrue($tableIndex->isUnique());
self::assertSame(['field', 'anotherField'], $tableIndex->getColumns());
}
}

/**
Expand Down Expand Up @@ -559,6 +580,32 @@ class IndexByFieldEntity
public $fieldName;
}

/**
* @Entity
* @Table(uniqueConstraints={@UniqueConstraint(columns={"field", "anotherField"})})
*/
class GH11314Entity
{
/**
* @Column(type="integer")
* @Id
* @var int
*/
private $id;

/**
* @Column(name="field", type="string")
* @var string
*/
private $field;

/**
* @Column(name="anotherField", type="string")
* @var string
*/
private $anotherField;
}

class IncorrectIndexByFieldEntity
{
/** @var int */
Expand Down

0 comments on commit ab5e9e3

Please sign in to comment.