From f1170c84a4ac6df6b96977f8ae040c3054e7bdbb Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Tue, 11 Nov 2014 23:41:04 +0100 Subject: [PATCH] #1086 - Passing type information when building meta-mappings for JTI and STI inheritances --- .../AbstractEntityInheritancePersister.php | 6 ++++-- .../Entity/JoinedSubclassPersister.php | 18 ++++++++++++++++-- .../Persisters/Entity/SingleTablePersister.php | 10 +++++++++- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php index 36d84d415..edb39afc6 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php @@ -80,13 +80,15 @@ abstract class AbstractEntityInheritancePersister extends BasicEntityPersister * @param string $tableAlias * @param string $joinColumnName * @param string $className + * @param string $type * * @return string */ - protected function getSelectJoinColumnSQL($tableAlias, $joinColumnName, $className) + protected function getSelectJoinColumnSQL($tableAlias, $joinColumnName, $className, $type) { $columnAlias = $this->getSQLColumnAlias($joinColumnName); - $this->rsm->addMetaResult('r', $columnAlias, $joinColumnName); + + $this->rsm->addMetaResult('r', $columnAlias, $joinColumnName, false, $type); return $tableAlias . '.' . $joinColumnName . ' AS ' . $columnAlias; } diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index b1bd56d8c..605d26a6e 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -457,7 +457,14 @@ class JoinedSubclassPersister extends AbstractEntityInheritancePersister ? $mapping['inherited'] : $this->class->name; - $columnList[] = $this->getSelectJoinColumnSQL($tableAlias, $srcColumn, $className); + $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + + $columnList[] = $this->getSelectJoinColumnSQL( + $tableAlias, + $srcColumn, + $className, + $targetClass->getTypeOfColumn($mapping['sourceToTargetKeyColumns'][$srcColumn]) + ); } } @@ -495,7 +502,14 @@ class JoinedSubclassPersister extends AbstractEntityInheritancePersister ? $mapping['inherited'] : $subClass->name; - $columnList[] = $this->getSelectJoinColumnSQL($tableAlias, $srcColumn, $className); + $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + + $columnList[] = $this->getSelectJoinColumnSQL( + $tableAlias, + $srcColumn, + $className, + $targetClass->getTypeOfColumn($mapping['sourceToTargetKeyColumns'][$srcColumn]) + ); } } } diff --git a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php index d0148f9cf..cf86c6d4d 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php @@ -88,7 +88,15 @@ class SingleTablePersister extends AbstractEntityInheritancePersister foreach ($assoc['targetToSourceKeyColumns'] as $srcColumn) { $className = isset($assoc['inherited']) ? $assoc['inherited'] : $this->class->name; - $columnList[] = $this->getSelectJoinColumnSQL($tableAlias, $srcColumn, $className); + + $targetClass = $this->em->getClassMetadata($mapping['targetEntity']); + + $columnList[] = $this->getSelectJoinColumnSQL( + $tableAlias, + $srcColumn, + $className, + $targetClass->getTypeOfColumn($mapping['sourceToTargetKeyColumns'][$srcColumn]) + ); } } }