From 82163a33011cdbd027f1985b9d8097b363218727 Mon Sep 17 00:00:00 2001 From: Jack Sleight Date: Wed, 14 Jan 2015 16:32:23 +0000 Subject: [PATCH 1/7] Include className in calls to NamingStrategy joinColumnName method. --- docs/en/reference/namingstrategy.rst | 4 ++-- lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php | 4 ++-- lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php | 2 +- lib/Doctrine/ORM/Mapping/NamingStrategy.php | 2 +- lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/en/reference/namingstrategy.rst b/docs/en/reference/namingstrategy.rst index e1a29cd3e..9d82d8d8b 100644 --- a/docs/en/reference/namingstrategy.rst +++ b/docs/en/reference/namingstrategy.rst @@ -78,7 +78,7 @@ a "naming standard" for database tables and columns. * @param string $propertyName A property * @return string A join column name */ - function joinColumnName($propertyName); + function joinColumnName($propertyName, $className = null); /** * Return a join table name @@ -124,7 +124,7 @@ You need to implements NamingStrategy first. Following is an example { return 'id'; } - public function joinColumnName($propertyName) + public function joinColumnName($propertyName, $className = null) { return $propertyName . '_' . $this->referenceColumnName(); } diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php index bbfae15f0..67567456c 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php @@ -1553,7 +1553,7 @@ class ClassMetadataInfo implements ClassMetadata if ( ! isset($mapping['joinColumns']) || ! $mapping['joinColumns']) { // Apply default join column $mapping['joinColumns'] = array(array( - 'name' => $this->namingStrategy->joinColumnName($mapping['fieldName']), + 'name' => $this->namingStrategy->joinColumnName($mapping['fieldName'], $this->name), 'referencedColumnName' => $this->namingStrategy->referenceColumnName() )); } @@ -1571,7 +1571,7 @@ class ClassMetadataInfo implements ClassMetadata } if (empty($joinColumn['name'])) { - $joinColumn['name'] = $this->namingStrategy->joinColumnName($mapping['fieldName']); + $joinColumn['name'] = $this->namingStrategy->joinColumnName($mapping['fieldName'], $this->name); } if (empty($joinColumn['referencedColumnName'])) { diff --git a/lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php b/lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php index 06bc593be..1e75f9794 100644 --- a/lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php @@ -69,7 +69,7 @@ class DefaultNamingStrategy implements NamingStrategy /** * {@inheritdoc} */ - public function joinColumnName($propertyName) + public function joinColumnName($propertyName, $className = null) { return $propertyName . '_' . $this->referenceColumnName(); } diff --git a/lib/Doctrine/ORM/Mapping/NamingStrategy.php b/lib/Doctrine/ORM/Mapping/NamingStrategy.php index 94938ccf2..843a39912 100644 --- a/lib/Doctrine/ORM/Mapping/NamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/NamingStrategy.php @@ -73,7 +73,7 @@ interface NamingStrategy * * @return string A join column name. */ - function joinColumnName($propertyName); + function joinColumnName($propertyName, $className = null); /** * Returns a join table name. diff --git a/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php b/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php index ec74373a8..543d92ba3 100644 --- a/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php @@ -106,7 +106,7 @@ class UnderscoreNamingStrategy implements NamingStrategy /** * {@inheritdoc} */ - public function joinColumnName($propertyName) + public function joinColumnName($propertyName, $className = null) { return $this->underscore($propertyName) . '_' . $this->referenceColumnName(); } From be9d92bb269546bab97bbc91fabecf74b336a05e Mon Sep 17 00:00:00 2001 From: Jack Sleight Date: Thu, 15 Jan 2015 16:15:11 +0000 Subject: [PATCH 2/7] Example NamingStrategy for using class name in join column names. --- .../Mapping/JoinColumnClassNamingStrategy.php | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 lib/Doctrine/ORM/Mapping/JoinColumnClassNamingStrategy.php diff --git a/lib/Doctrine/ORM/Mapping/JoinColumnClassNamingStrategy.php b/lib/Doctrine/ORM/Mapping/JoinColumnClassNamingStrategy.php new file mode 100644 index 000000000..299ff62be --- /dev/null +++ b/lib/Doctrine/ORM/Mapping/JoinColumnClassNamingStrategy.php @@ -0,0 +1,40 @@ +. + */ + +namespace Doctrine\ORM\Mapping; + +/** + * The default NamingStrategy + * + * + * @link www.doctrine-project.org + * @since 2.3 + * @author Fabio B. Silva + */ +class JoinColumnClassNamingStrategy extends DefaultNamingStrategy +{ + /** + * {@inheritdoc} + */ + public function joinColumnName($propertyName, $className = null) + { + return strtolower($this->classToTableName($className)) . '_' . $propertyName . '_' . $this->referenceColumnName(); + } +} From 04d8f66b7273e97918682834cf36be491f432cd0 Mon Sep 17 00:00:00 2001 From: Jack Sleight Date: Thu, 15 Jan 2015 16:16:53 +0000 Subject: [PATCH 3/7] Tests for new class based join column NamingStrategy --- .../Tests/ORM/Mapping/NamingStrategyTest.php | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php index 61decf2e7..1d8233025 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php @@ -4,6 +4,7 @@ namespace Doctrine\Tests\ORM\Mapping; use Doctrine\ORM\Mapping\UnderscoreNamingStrategy; use Doctrine\ORM\Mapping\DefaultNamingStrategy; +use Doctrine\ORM\Mapping\JoinColumnClassNamingStrategy; use Doctrine\ORM\Mapping\NamingStrategy; /** @@ -19,6 +20,14 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase return new DefaultNamingStrategy(); } + /** + * @return JoinColumnClassNamingStrategy + */ + static private function joinColumnClassNaming() + { + return new JoinColumnClassNamingStrategy(); + } + /** * @return UnderscoreNamingStrategy */ @@ -176,6 +185,14 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase array(self::underscoreNamingUpper(), 'SOME_COLUMN_ID', 'someColumn', null, ), + + // JoinColumnClassNamingStrategy + array(self::joinColumnClassNaming(), 'classname_someColumn_id', + 'someColumn', 'Some\ClassName', + ), + array(self::joinColumnClassNaming(), 'classname_some_column_id', + 'some_column', 'ClassName', + ), ); } @@ -186,9 +203,9 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase * @param string $expected * @param string $propertyName */ - public function testJoinColumnName(NamingStrategy $strategy, $expected, $propertyName) + public function testJoinColumnName(NamingStrategy $strategy, $expected, $propertyName, $className = null) { - $this->assertEquals($expected, $strategy->joinColumnName($propertyName)); + $this->assertEquals($expected, $strategy->joinColumnName($propertyName, $className)); } /** From 60523d1b627b4253d6d27434a48bfa37e0bf329e Mon Sep 17 00:00:00 2001 From: Jack Sleight Date: Thu, 15 Jan 2015 16:27:10 +0000 Subject: [PATCH 4/7] Update docblock for joinColumnName to include className details --- lib/Doctrine/ORM/Mapping/NamingStrategy.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/Doctrine/ORM/Mapping/NamingStrategy.php b/lib/Doctrine/ORM/Mapping/NamingStrategy.php index 843a39912..958f6767a 100644 --- a/lib/Doctrine/ORM/Mapping/NamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/NamingStrategy.php @@ -70,6 +70,7 @@ interface NamingStrategy * Returns a join column name for a property. * * @param string $propertyName A property name. + * @param string|null $className The fully-qualified class name. * * @return string A join column name. */ From 29007e7d798f4eb92ff9332436e2ec64f5f6afee Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sun, 18 Jan 2015 00:03:49 +0100 Subject: [PATCH 5/7] #1252 DDC-3496 - minor test cleanups (avoiding private static method) --- .../Tests/ORM/Mapping/NamingStrategyTest.php | 33 ++++--------------- 1 file changed, 6 insertions(+), 27 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php index 1d8233025..b6b87f626 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php @@ -20,14 +20,6 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase return new DefaultNamingStrategy(); } - /** - * @return JoinColumnClassNamingStrategy - */ - static private function joinColumnClassNaming() - { - return new JoinColumnClassNamingStrategy(); - } - /** * @return UnderscoreNamingStrategy */ @@ -171,28 +163,15 @@ class NamingStrategyTest extends \Doctrine\Tests\OrmTestCase { return array( // DefaultNamingStrategy - array(self::defaultNaming(), 'someColumn_id', - 'someColumn', null, - ), - array(self::defaultNaming(), 'some_column_id', - 'some_column', null, - ), + array(self::defaultNaming(), 'someColumn_id', 'someColumn', null), + array(self::defaultNaming(), 'some_column_id', 'some_column', null), // UnderscoreNamingStrategy - array(self::underscoreNamingLower(), 'some_column_id', - 'someColumn', null, - ), - array(self::underscoreNamingUpper(), 'SOME_COLUMN_ID', - 'someColumn', null, - ), - + array(self::underscoreNamingLower(), 'some_column_id', 'someColumn', null), + array(self::underscoreNamingUpper(), 'SOME_COLUMN_ID', 'someColumn', null), // JoinColumnClassNamingStrategy - array(self::joinColumnClassNaming(), 'classname_someColumn_id', - 'someColumn', 'Some\ClassName', - ), - array(self::joinColumnClassNaming(), 'classname_some_column_id', - 'some_column', 'ClassName', - ), + array(new JoinColumnClassNamingStrategy(), 'classname_someColumn_id', 'someColumn', 'Some\ClassName'), + array(new JoinColumnClassNamingStrategy(), 'classname_some_column_id', 'some_column', 'ClassName'), ); } From 369a9934a563bb53b77d36e0e061e76015a7bfde Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sun, 18 Jan 2015 00:07:54 +0100 Subject: [PATCH 6/7] #1252 DDC-3496 - moving stub naming strategy to tests directory --- .../JoinColumnClassNamingStrategy.php | 15 +++++++-------- .../Tests/ORM/Mapping/NamingStrategyTest.php | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) rename {lib/Doctrine/ORM/Mapping => tests/Doctrine/Tests/ORM/Mapping/NamingStrategy}/JoinColumnClassNamingStrategy.php (78%) diff --git a/lib/Doctrine/ORM/Mapping/JoinColumnClassNamingStrategy.php b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategy/JoinColumnClassNamingStrategy.php similarity index 78% rename from lib/Doctrine/ORM/Mapping/JoinColumnClassNamingStrategy.php rename to tests/Doctrine/Tests/ORM/Mapping/NamingStrategy/JoinColumnClassNamingStrategy.php index 299ff62be..8de8fa940 100644 --- a/lib/Doctrine/ORM/Mapping/JoinColumnClassNamingStrategy.php +++ b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategy/JoinColumnClassNamingStrategy.php @@ -18,15 +18,12 @@ * . */ -namespace Doctrine\ORM\Mapping; +namespace Doctrine\Tests\ORM\Mapping\NamingStrategy; + +use Doctrine\ORM\Mapping\DefaultNamingStrategy; /** - * The default NamingStrategy - * - * - * @link www.doctrine-project.org - * @since 2.3 - * @author Fabio B. Silva + * Stub naming strategy to verify `joinColumnName` proper behavior */ class JoinColumnClassNamingStrategy extends DefaultNamingStrategy { @@ -35,6 +32,8 @@ class JoinColumnClassNamingStrategy extends DefaultNamingStrategy */ public function joinColumnName($propertyName, $className = null) { - return strtolower($this->classToTableName($className)) . '_' . $propertyName . '_' . $this->referenceColumnName(); + return strtolower($this->classToTableName($className)) + . '_' . $propertyName + . '_' . $this->referenceColumnName(); } } diff --git a/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php index b6b87f626..16f0fe576 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/NamingStrategyTest.php @@ -4,8 +4,8 @@ namespace Doctrine\Tests\ORM\Mapping; use Doctrine\ORM\Mapping\UnderscoreNamingStrategy; use Doctrine\ORM\Mapping\DefaultNamingStrategy; -use Doctrine\ORM\Mapping\JoinColumnClassNamingStrategy; use Doctrine\ORM\Mapping\NamingStrategy; +use Doctrine\Tests\ORM\Mapping\NamingStrategy\JoinColumnClassNamingStrategy; /** * @group DDC-559 From 025565005d66927a6f3f9f3ced131017173c19c5 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Sun, 18 Jan 2015 00:11:47 +0100 Subject: [PATCH 7/7] #1252 DDC-3496 - reverting interface BC break --- lib/Doctrine/ORM/Mapping/NamingStrategy.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Mapping/NamingStrategy.php b/lib/Doctrine/ORM/Mapping/NamingStrategy.php index 958f6767a..8845cb1ed 100644 --- a/lib/Doctrine/ORM/Mapping/NamingStrategy.php +++ b/lib/Doctrine/ORM/Mapping/NamingStrategy.php @@ -71,10 +71,11 @@ interface NamingStrategy * * @param string $propertyName A property name. * @param string|null $className The fully-qualified class name. + * This parameter is omitted from the signature due to BC * * @return string A join column name. */ - function joinColumnName($propertyName, $className = null); + function joinColumnName($propertyName/*, $className = null*/); /** * Returns a join table name.