|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
declare(strict_types=1); |
|
4
|
|
|
|
|
5
|
|
|
namespace Doctrine\ORM\Persisters\Entity; |
|
6
|
|
|
|
|
7
|
|
|
use Doctrine\ORM\Mapping\JoinColumnMetadata; |
|
8
|
|
|
|
|
9
|
|
|
/** |
|
10
|
|
|
* Base class for entity persisters that implement a certain inheritance mapping strategy. |
|
11
|
|
|
* All these persisters are assumed to use a discriminator column to discriminate entity |
|
12
|
|
|
* types in the hierarchy. |
|
13
|
|
|
* |
|
14
|
|
|
* @author Roman Borschel <[email protected]> |
|
15
|
|
|
* @author Benjamin Eberlei <[email protected]> |
|
16
|
|
|
* @since 2.0 |
|
17
|
|
|
*/ |
|
18
|
|
|
abstract class AbstractEntityInheritancePersister extends BasicEntityPersister |
|
19
|
|
|
{ |
|
20
|
|
|
/** |
|
21
|
|
|
* {@inheritdoc} |
|
22
|
|
|
*/ |
|
23
|
328 |
|
protected function prepareInsertData($entity) : array |
|
24
|
|
|
{ |
|
25
|
328 |
|
$data = parent::prepareInsertData($entity); |
|
26
|
|
|
|
|
27
|
|
|
// Populate the discriminator column |
|
28
|
328 |
|
$discColumn = $this->class->discriminatorColumn; |
|
29
|
328 |
|
$tableName = $discColumn->getTableName(); |
|
30
|
328 |
|
$columnName = $discColumn->getColumnName(); |
|
31
|
|
|
|
|
32
|
328 |
|
$this->columns[$columnName] = $discColumn; |
|
33
|
|
|
|
|
34
|
328 |
|
$data[$tableName][$columnName] = $this->class->discriminatorValue; |
|
35
|
|
|
|
|
36
|
328 |
|
return $data; |
|
37
|
|
|
} |
|
38
|
|
|
|
|
39
|
|
|
/** |
|
40
|
|
|
* @param JoinColumnMetadata $joinColumnMetadata |
|
41
|
|
|
* |
|
42
|
|
|
* @return string |
|
43
|
|
|
*/ |
|
44
|
59 |
|
protected function getSelectJoinColumnSQL(JoinColumnMetadata $joinColumnMetadata) |
|
45
|
|
|
{ |
|
46
|
59 |
|
$tableAlias = $this->getSQLTableAlias($joinColumnMetadata->getTableName()); |
|
47
|
59 |
|
$columnAlias = $this->getSQLColumnAlias(); |
|
48
|
59 |
|
$columnType = $joinColumnMetadata->getType(); |
|
49
|
59 |
|
$quotedColumnName = $this->platform->quoteIdentifier($joinColumnMetadata->getColumnName()); |
|
50
|
59 |
|
$sql = sprintf('%s.%s', $tableAlias, $quotedColumnName); |
|
51
|
|
|
|
|
52
|
59 |
|
$this->currentPersisterContext->rsm->addMetaResult( |
|
53
|
59 |
|
'r', |
|
54
|
59 |
|
$columnAlias, |
|
55
|
59 |
|
$joinColumnMetadata->getColumnName(), |
|
56
|
59 |
|
$joinColumnMetadata->isPrimaryKey(), |
|
57
|
59 |
|
$columnType |
|
58
|
|
|
); |
|
59
|
|
|
|
|
60
|
59 |
|
return $columnType->convertToPHPValueSQL($sql, $this->platform) . ' AS ' . $columnAlias; |
|
61
|
|
|
} |
|
62
|
|
|
} |
|
63
|
|
|
|