From 20fb8270dc3c84eceaf90979644fdfbe0b2e615e Mon Sep 17 00:00:00 2001 From: "Johannes M. Schmitt" Date: Fri, 1 Nov 2013 21:44:57 +0100 Subject: [PATCH] make use of NamingStrategy for columns of embedded fields --- UPGRADE.md | 8 ++++++++ lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php | 2 +- lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php | 8 ++++++++ lib/Doctrine/ORM/Mapping/NamingStrategy.php | 10 ++++++++++ lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php | 8 ++++++++ 5 files changed, 35 insertions(+), 1 deletion(-) diff --git a/UPGRADE.md b/UPGRADE.md index b864d8614..224967b87 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -1,3 +1,11 @@ +# Upgrade to 2.5 + +## BC BREAK: NamingStrategy has a new method ``embeddedFieldToColumnName($propertyName, $embeddedColumnName)`` + +This method generates the column name for fields of embedded objects. If you implement your custom NamingStrategy, you +now also need to implement this new method. + + # Upgrade to 2.4 ## BC BREAK: Compatibility Bugfix in PersistentCollection#matching() diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php index 03dc3cb15..c72f884e9 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php @@ -3094,7 +3094,7 @@ class ClassMetadataInfo implements ClassMetadata $fieldMapping['declaredField'] = $property; $fieldMapping['originalField'] = $fieldMapping['fieldName']; $fieldMapping['fieldName'] = $property . "." . $fieldMapping['fieldName']; - $fieldMapping['columnName'] = $property . "_" . $fieldMapping['columnName']; + $fieldMapping['columnName'] = $this->namingStrategy->embeddedFieldToColumnName($property, $fieldMapping['columnName']); $this->mapField($fieldMapping); } diff --git a/lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php b/lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php index 2433b4afa..22e51674e 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php @@ -50,6 +50,14 @@ class DefaultNamingStrategy implements NamingStrategy return $propertyName; } + /** + * {@inheritdoc} + */ + public function embeddedFieldToColumnName($propertyName, $embeddedColumnName) + { + return $propertyName.ucfirst($embeddedColumnName); + } + /** * {@inheritdoc} */ diff --git a/lib/Doctrine/ORM/Mapping/NamingStrategy.php b/lib/Doctrine/ORM/Mapping/NamingStrategy.php index fc66905c5..b48e95069 100644 --- a/lib/Doctrine/ORM/Mapping/NamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/NamingStrategy.php @@ -49,6 +49,16 @@ interface NamingStrategy */ function propertyToColumnName($propertyName, $className = null); + /** + * Returns a column name for an embedded property. + * + * @param string $propertyName + * @param string $embeddedColumnName + * + * @return string + */ + function embeddedFieldToColumnName($propertyName, $embeddedColumnName); + /** * Returns the default reference column name. * diff --git a/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php b/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php index 5231aaafc..e301d958b 100644 --- a/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php @@ -87,6 +87,14 @@ class UnderscoreNamingStrategy implements NamingStrategy return $this->underscore($propertyName); } + /** + * {@inheritdoc} + */ + public function embeddedFieldToColumnName($propertyName, $embeddedColumnName) + { + return $this->underscore($propertyName).'_'.$embeddedColumnName; + } + /** * {@inheritdoc} */