Skip to content

Commit 9a74ae6

Browse files
Fix discriminatorColumn phpdoc (#9168)
1 parent 32eb38e commit 9a74ae6

File tree

8 files changed

+44
-24
lines changed

8 files changed

+44
-24
lines changed

lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ protected function hydrateRowData(array $row, array &$result)
7979

8080
// We need to find the correct entity class name if we have inheritance in resultset
8181
if ($this->class->inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) {
82-
$discrColumnName = $this->getSQLResultCasing($this->_platform, $this->class->discriminatorColumn['name']);
82+
$discrColumn = $this->class->getDiscriminatorColumn();
83+
$discrColumnName = $this->getSQLResultCasing($this->_platform, $discrColumn['name']);
8384

8485
// Find mapped discriminator column from the result set.
8586
$metaMappingDiscrColumnName = array_search($discrColumnName, $this->resultSetMapping()->metaMappings, true);

lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
use Doctrine\Persistence\Mapping\ClassMetadata;
2121
use Doctrine\Persistence\Mapping\ReflectionService;
2222
use InvalidArgumentException;
23+
use LogicException;
2324
use ReflectionClass;
2425
use ReflectionNamedType;
2526
use ReflectionProperty;
@@ -496,7 +497,7 @@ class ClassMetadataInfo implements ClassMetadata
496497
* READ-ONLY: The definition of the discriminator column used in JOINED and SINGLE_TABLE
497498
* inheritance mappings.
498499
*
499-
* @psalm-var array<string, mixed>
500+
* @psalm-var array<string, mixed>|null
500501
*/
501502
public $discriminatorColumn;
502503

@@ -3098,6 +3099,18 @@ public function setDiscriminatorColumn($columnDef)
30983099
}
30993100
}
31003101

3102+
/**
3103+
* @return array<string, mixed>
3104+
*/
3105+
final public function getDiscriminatorColumn(): array
3106+
{
3107+
if ($this->discriminatorColumn === null) {
3108+
throw new LogicException('The discriminator column was not set.');
3109+
}
3110+
3111+
return $this->discriminatorColumn;
3112+
}
3113+
31013114
/**
31023115
* Sets the discriminator values used by this class.
31033116
* Used for JOINED and SINGLE_TABLE inheritance mapping strategies.

lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ protected function prepareInsertData($entity)
2424
$data = parent::prepareInsertData($entity);
2525

2626
// Populate the discriminator column
27-
$discColumn = $this->class->discriminatorColumn;
27+
$discColumn = $this->class->getDiscriminatorColumn();
2828
$this->columnTypes[$discColumn['name']] = $discColumn['type'];
2929
$data[$this->getDiscriminatorColumnTableName()][$discColumn['name']] = $this->class->discriminatorValue;
3030

lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
use function array_combine;
1515
use function implode;
16-
use function is_array;
1716

1817
/**
1918
* The joined subclass persister maps a single entity instance to several tables in the
@@ -412,14 +411,15 @@ protected function getSelectColumnsSQL()
412411
}
413412

414413
$columnList = [];
415-
$discrColumn = $this->class->discriminatorColumn['name'];
416-
$discrColumnType = $this->class->discriminatorColumn['type'];
414+
$discrColumn = $this->class->getDiscriminatorColumn();
415+
$discrColumnName = $discrColumn['name'];
416+
$discrColumnType = $discrColumn['type'];
417417
$baseTableAlias = $this->getSQLTableAlias($this->class->name);
418-
$resultColumnName = $this->getSQLResultCasing($this->platform, $discrColumn);
418+
$resultColumnName = $this->getSQLResultCasing($this->platform, $discrColumnName);
419419

420420
$this->currentPersisterContext->rsm->addEntityResult($this->class->name, 'r');
421421
$this->currentPersisterContext->rsm->setDiscriminatorColumn('r', $resultColumnName);
422-
$this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumn, false, $discrColumnType);
422+
$this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumnName, false, $discrColumnType);
423423

424424
// Add regular columns
425425
foreach ($this->class->fieldMappings as $fieldName => $mapping) {
@@ -457,7 +457,7 @@ protected function getSelectColumnsSQL()
457457
? $baseTableAlias
458458
: $this->getSQLTableAlias($this->class->rootEntityName);
459459

460-
$columnList[] = $tableAlias . '.' . $discrColumn;
460+
$columnList[] = $tableAlias . '.' . $discrColumnName;
461461

462462
// sub tables
463463
foreach ($this->class->subClasses as $subClassName) {
@@ -540,7 +540,7 @@ protected function getInsertColumnList()
540540

541541
// Add discriminator column if it is the topmost class.
542542
if ($this->class->name === $this->class->rootEntityName) {
543-
$columns[] = $this->class->discriminatorColumn['name'];
543+
$columns[] = $this->class->getDiscriminatorColumn()['name'];
544544
}
545545

546546
return $columns;

lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,17 @@ protected function getSelectColumnsSQL()
4444
$rootClass = $this->em->getClassMetadata($this->class->rootEntityName);
4545
$tableAlias = $this->getSQLTableAlias($rootClass->name);
4646

47-
// Append discriminator column
48-
$discrColumn = $this->class->discriminatorColumn['name'];
49-
$discrColumnType = $this->class->discriminatorColumn['type'];
47+
// Append discriminator column
48+
$discrColumn = $this->class->getDiscriminatorColumn();
49+
$discrColumnName = $discrColumn['name'];
50+
$discrColumnType = $discrColumn['type'];
5051

51-
$columnList[] = $tableAlias . '.' . $discrColumn;
52+
$columnList[] = $tableAlias . '.' . $discrColumnName;
5253

53-
$resultColumnName = $this->getSQLResultCasing($this->platform, $discrColumn);
54+
$resultColumnName = $this->getSQLResultCasing($this->platform, $discrColumnName);
5455

5556
$this->currentPersisterContext->rsm->setDiscriminatorColumn('r', $resultColumnName);
56-
$this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumn, false, $discrColumnType);
57+
$this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumnName, false, $discrColumnType);
5758

5859
// Append subclass columns
5960
foreach ($this->class->subClasses as $subClassName) {
@@ -100,7 +101,7 @@ protected function getInsertColumnList()
100101
$columns = parent::getInsertColumnList();
101102

102103
// Add discriminator column to the INSERT SQL
103-
$columns[] = $this->class->discriminatorColumn['name'];
104+
$columns[] = $this->class->getDiscriminatorColumn()['name'];
104105

105106
return $columns;
106107
}
@@ -158,11 +159,12 @@ protected function getSelectConditionDiscriminatorValueSQL()
158159
$values[] = $this->conn->quote($discrValues[$subclassName]);
159160
}
160161

162+
$discColumnName = $this->class->getDiscriminatorColumn()['name'];
163+
161164
$values = implode(', ', $values);
162-
$discColumn = $this->class->discriminatorColumn['name'];
163165
$tableAlias = $this->getSQLTableAlias($this->class->name);
164166

165-
return $tableAlias . '.' . $discColumn . ' IN (' . $values . ')';
167+
return $tableAlias . '.' . $discColumnName . ' IN (' . $values . ')';
166168
}
167169

168170
/**

lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ public function addNamedNativeQueryEntityResultMapping(ClassMetadataInfo $classM
369369
{
370370
if (isset($entityMapping['discriminatorColumn']) && $entityMapping['discriminatorColumn']) {
371371
$discriminatorColumn = $entityMapping['discriminatorColumn'];
372-
$discriminatorType = $classMetadata->discriminatorColumn['type'];
372+
$discriminatorType = $classMetadata->getDiscriminatorColumn()['type'];
373373

374374
$this->setDiscriminatorColumn($alias, $discriminatorColumn);
375375
$this->addMetaResult($alias, $discriminatorColumn, $discriminatorColumn, false, $discriminatorType);

lib/Doctrine/ORM/Query/SqlWalker.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ private function generateDiscriminatorColumnConditionSQL(array $dqlAliases): str
465465
? $this->getSQLTableAlias($class->getTableName(), $dqlAlias) . '.'
466466
: '';
467467

468-
$sqlParts[] = $sqlTableAlias . $class->discriminatorColumn['name'] . ' IN (' . implode(', ', $values) . ')';
468+
$sqlParts[] = $sqlTableAlias . $class->getDiscriminatorColumn()['name'] . ' IN (' . implode(', ', $values) . ')';
469469
}
470470

471471
$sql = implode(' AND ', $sqlParts);
@@ -739,7 +739,7 @@ public function walkSelectClause($selectClause)
739739
// Add discriminator columns to SQL
740740
$rootClass = $this->em->getClassMetadata($class->rootEntityName);
741741
$tblAlias = $this->getSQLTableAlias($rootClass->getTableName(), $dqlAlias);
742-
$discrColumn = $rootClass->discriminatorColumn;
742+
$discrColumn = $rootClass->getDiscriminatorColumn();
743743
$columnAlias = $this->getSQLColumnAlias($discrColumn['name']);
744744

745745
$sqlSelectExpressions[] = $tblAlias . '.' . $discrColumn['name'] . ' AS ' . $columnAlias;
@@ -2091,7 +2091,7 @@ public function walkInstanceOfExpression($instanceOfExpr)
20912091
$sql .= $this->getSQLTableAlias($discrClass->getTableName(), $dqlAlias) . '.';
20922092
}
20932093

2094-
$sql .= $class->discriminatorColumn['name'] . ($instanceOfExpr->not ? ' NOT IN ' : ' IN ');
2094+
$sql .= $class->getDiscriminatorColumn()['name'] . ($instanceOfExpr->not ? ' NOT IN ' : ' IN ');
20952095
$sql .= $this->getChildDiscriminatorsFromClassMetadata($discrClass, $instanceOfExpr);
20962096

20972097
return $sql;

lib/Doctrine/ORM/Tools/EntityGenerator.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1140,7 +1140,11 @@ protected function generateDiscriminatorColumnAnnotation(ClassMetadataInfo $meta
11401140
return '';
11411141
}
11421142

1143-
$discrColumn = $metadata->discriminatorColumn;
1143+
$discrColumn = $metadata->discriminatorColumn;
1144+
if ($discrColumn === null) {
1145+
return '';
1146+
}
1147+
11441148
$columnDefinition = 'name="' . $discrColumn['name']
11451149
. '", type="' . $discrColumn['type']
11461150
. '", length=' . $discrColumn['length'];

0 commit comments

Comments
 (0)