summaryrefslogtreecommitdiff
path: root/vendor/doctrine/orm/src/Persisters/Entity/AbstractEntityInheritancePersister.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/doctrine/orm/src/Persisters/Entity/AbstractEntityInheritancePersister.php')
-rw-r--r--vendor/doctrine/orm/src/Persisters/Entity/AbstractEntityInheritancePersister.php66
1 files changed, 66 insertions, 0 deletions
diff --git a/vendor/doctrine/orm/src/Persisters/Entity/AbstractEntityInheritancePersister.php b/vendor/doctrine/orm/src/Persisters/Entity/AbstractEntityInheritancePersister.php
new file mode 100644
index 0000000..cf8a74e
--- /dev/null
+++ b/vendor/doctrine/orm/src/Persisters/Entity/AbstractEntityInheritancePersister.php
@@ -0,0 +1,66 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Persisters\Entity;
6
7use Doctrine\DBAL\Types\Type;
8use Doctrine\ORM\Mapping\ClassMetadata;
9
10use function sprintf;
11
12/**
13 * Base class for entity persisters that implement a certain inheritance mapping strategy.
14 * All these persisters are assumed to use a discriminator column to discriminate entity
15 * types in the hierarchy.
16 */
17abstract class AbstractEntityInheritancePersister extends BasicEntityPersister
18{
19 /**
20 * {@inheritDoc}
21 */
22 protected function prepareInsertData(object $entity): array
23 {
24 $data = parent::prepareInsertData($entity);
25
26 // Populate the discriminator column
27 $discColumn = $this->class->getDiscriminatorColumn();
28 $this->columnTypes[$discColumn->name] = $discColumn->type;
29 $data[$this->getDiscriminatorColumnTableName()][$discColumn->name] = $this->class->discriminatorValue;
30
31 return $data;
32 }
33
34 /**
35 * Gets the name of the table that contains the discriminator column.
36 */
37 abstract protected function getDiscriminatorColumnTableName(): string;
38
39 protected function getSelectColumnSQL(string $field, ClassMetadata $class, string $alias = 'r'): string
40 {
41 $tableAlias = $alias === 'r' ? '' : $alias;
42 $fieldMapping = $class->fieldMappings[$field];
43 $columnAlias = $this->getSQLColumnAlias($fieldMapping->columnName);
44 $sql = sprintf(
45 '%s.%s',
46 $this->getSQLTableAlias($class->name, $tableAlias),
47 $this->quoteStrategy->getColumnName($field, $class, $this->platform),
48 );
49
50 $this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field, $class->name);
51
52 $type = Type::getType($fieldMapping->type);
53 $sql = $type->convertToPHPValueSQL($sql, $this->platform);
54
55 return $sql . ' AS ' . $columnAlias;
56 }
57
58 protected function getSelectJoinColumnSQL(string $tableAlias, string $joinColumnName, string $quotedColumnName, string $type): string
59 {
60 $columnAlias = $this->getSQLColumnAlias($joinColumnName);
61
62 $this->currentPersisterContext->rsm->addMetaResult('r', $columnAlias, $joinColumnName, false, $type);
63
64 return $tableAlias . '.' . $quotedColumnName . ' AS ' . $columnAlias;
65 }
66}