From c98543c1efc3ddd8ee80cf62b56775922cf69173 Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Fri, 9 Apr 2010 15:34:53 +0200 Subject: [PATCH 1/3] Fix bin/doctrine.php global doctrine binary to work with Symfony components --- bin/doctrine.php | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/bin/doctrine.php b/bin/doctrine.php index cd507f6c7..b1a29efeb 100644 --- a/bin/doctrine.php +++ b/bin/doctrine.php @@ -2,12 +2,15 @@ require_once 'Doctrine/Common/ClassLoader.php'; -$classLoader = new \Doctrine\Common\ClassLoader('Doctrine'); +$classLoader = new \Doctrine\Common\ClassLoader('Doctrine', __DIR__ . '/../lib'); +$classLoader->register(); + +$classLoader = new \Doctrine\Common\ClassLoader('Symfony', __DIR__ . '/../lib/vendor'); $classLoader->register(); $configFile = getcwd() . DIRECTORY_SEPARATOR . 'cli-config.php'; -$configuration = null; +$helperSet = null; if (file_exists($configFile)) { if ( ! is_readable($configFile)) { trigger_error( @@ -17,15 +20,38 @@ if (file_exists($configFile)) { require $configFile; - foreach ($GLOBALS as $configCandidate) { - if ($configCandidate instanceof \Doctrine\Common\CLI\Configuration) { - $configuration = $configCandidate; + foreach ($GLOBALS as $helperSetCandidate) { + if ($helperSetCandidate instanceof \Symfony\Components\Console\Helper\HelperSet) { + $helperSet = $helperSetCandidate; break; } } } -$configuration = ($configuration) ?: new \Doctrine\Common\CLI\Configuration(); +$helperSet = ($helperSet) ?: new \Symfony\Components\Console\Helper\HelperSet(); -$cli = new \Doctrine\Common\CLI\CLIController($configuration); -$cli->run($_SERVER['argv']); \ No newline at end of file +$cli = new \Symfony\Components\Console\Application('Doctrine Command Line Interface', Doctrine\Common\Version::VERSION); +$cli->setCatchExceptions(true); +$cli->setHelperSet($helperSet); +$cli->addCommands(array( + // DBAL Commands + new \Doctrine\DBAL\Tools\Console\Command\RunSqlCommand(), + new \Doctrine\DBAL\Tools\Console\Command\ImportCommand(), + + // ORM Commands + new \Doctrine\ORM\Tools\Console\Command\ClearCache\MetadataCommand(), + new \Doctrine\ORM\Tools\Console\Command\ClearCache\ResultCommand(), + new \Doctrine\ORM\Tools\Console\Command\ClearCache\QueryCommand(), + new \Doctrine\ORM\Tools\Console\Command\SchemaTool\CreateCommand(), + new \Doctrine\ORM\Tools\Console\Command\SchemaTool\UpdateCommand(), + new \Doctrine\ORM\Tools\Console\Command\SchemaTool\DropCommand(), + new \Doctrine\ORM\Tools\Console\Command\EnsureProductionSettingsCommand(), + new \Doctrine\ORM\Tools\Console\Command\ConvertDoctrine1SchemaCommand(), + new \Doctrine\ORM\Tools\Console\Command\GenerateRepositoriesCommand(), + new \Doctrine\ORM\Tools\Console\Command\GenerateEntitiesCommand(), + new \Doctrine\ORM\Tools\Console\Command\GenerateProxiesCommand(), + new \Doctrine\ORM\Tools\Console\Command\ConvertMappingCommand(), + new \Doctrine\ORM\Tools\Console\Command\RunDqlCommand(), + +)); +$cli->run(); \ No newline at end of file From b67e1f86228ceba5d90fc7a0bfc5ede4e1616d0a Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Fri, 9 Apr 2010 15:40:42 +0200 Subject: [PATCH 2/3] Fixed testsuite after CLI refactorings, Removed Symfony YAML Autoloader Hack --- tests/Doctrine/Tests/Common/AllTests.php | 1 - tests/Doctrine/Tests/Common/CLI/AllTests.php | 34 ----- .../Tests/Common/CLI/CLIControllerTest.php | 115 ---------------- .../Tests/Common/CLI/ConfigurationTest.php | 23 ---- .../Tests/Common/CLI/OptionGroupTest.php | 123 ------------------ .../Doctrine/Tests/Common/CLI/OptionTest.php | 40 ------ tests/Doctrine/Tests/Common/CLI/StyleTest.php | 19 --- tests/Doctrine/Tests/TestInit.php | 12 +- 8 files changed, 3 insertions(+), 364 deletions(-) delete mode 100644 tests/Doctrine/Tests/Common/CLI/AllTests.php delete mode 100644 tests/Doctrine/Tests/Common/CLI/CLIControllerTest.php delete mode 100644 tests/Doctrine/Tests/Common/CLI/ConfigurationTest.php delete mode 100644 tests/Doctrine/Tests/Common/CLI/OptionGroupTest.php delete mode 100644 tests/Doctrine/Tests/Common/CLI/OptionTest.php delete mode 100644 tests/Doctrine/Tests/Common/CLI/StyleTest.php diff --git a/tests/Doctrine/Tests/Common/AllTests.php b/tests/Doctrine/Tests/Common/AllTests.php index 0afc81277..db6e81ffa 100644 --- a/tests/Doctrine/Tests/Common/AllTests.php +++ b/tests/Doctrine/Tests/Common/AllTests.php @@ -29,7 +29,6 @@ class AllTests $suite->addTest(Collections\AllTests::suite()); $suite->addTest(Annotations\AllTests::suite()); $suite->addTest(Cache\AllTests::suite()); - $suite->addTest(CLI\AllTests::suite()); return $suite; } diff --git a/tests/Doctrine/Tests/Common/CLI/AllTests.php b/tests/Doctrine/Tests/Common/CLI/AllTests.php deleted file mode 100644 index 101309fe5..000000000 --- a/tests/Doctrine/Tests/Common/CLI/AllTests.php +++ /dev/null @@ -1,34 +0,0 @@ -addTestSuite('Doctrine\Tests\Common\CLI\ConfigurationTest'); - $suite->addTestSuite('Doctrine\Tests\Common\CLI\OptionTest'); - $suite->addTestSuite('Doctrine\Tests\Common\CLI\OptionGroupTest'); - $suite->addTestSuite('Doctrine\Tests\Common\CLI\StyleTest'); - //$suite->addTestSuite('Doctrine\Tests\Common\CLI\CLIControllerTest'); - - return $suite; - } -} - -if (PHPUnit_MAIN_METHOD == 'Common_CLI_AllTests::main') { - AllTests::main(); -} \ No newline at end of file diff --git a/tests/Doctrine/Tests/Common/CLI/CLIControllerTest.php b/tests/Doctrine/Tests/Common/CLI/CLIControllerTest.php deleted file mode 100644 index 60d7214a7..000000000 --- a/tests/Doctrine/Tests/Common/CLI/CLIControllerTest.php +++ /dev/null @@ -1,115 +0,0 @@ - - */ -class CLIControllerTest extends \Doctrine\Tests\DoctrineTestCase -{ - private $cli; - - /** - * Sets up a CLIController instance with a task referencing the TaskMock - * class. Instances of that class created by the CLIController can be - * inspected for correctness. - */ - function setUp() - { - $config = $this->getMock('\Doctrine\Common\CLI\Configuration'); - $printer = $this->getMockForAbstractClass('\Doctrine\Common\CLI\Printers\AbstractPrinter'); - - $this->cli = new CLIController($config, $printer); - - TaskMock::$instances = array(); - - $this->cli->addTask('task-mock', '\Doctrine\Tests\Mocks\TaskMock'); - } - - /** - * Data provider with a bunch of task-mock calls with different arguments - * and their expected parsed format. - */ - static public function dataCLIControllerArguments() - { - return array( - array( - array('doctrine', 'Core:task-mock', '--bool'), - array('bool' => true), - 'Bool option' - ), - array( - array('doctrine', 'Core:task-mock', '--option=value'), - array('option' => 'value'), - 'Option with string value' - ), - array( - array('doctrine', 'Core:task-mock', '--option=value, with additional, info'), - array('option' => 'value, with additional, info'), - 'Option with string value containing space and comma' - ), - array( - array('doctrine', 'Core:task-mock', '--option='), - array('option' => array()), - 'Empty option value' - ), - array( - array('doctrine', 'Core:task-mock', '--option=value1,value2,value3'), - array('option' => array('value1', 'value2', 'value3')), - 'Option with list of string values' - ), - ); - } - - /** - * Checks whether the arguments coming from the data provider are correctly - * parsed by the CLIController and passed to the task to be run. - * - * @dataProvider dataCLIControllerArguments - * @param array $rawArgs - * @param array $parsedArgs - * @param string $message - */ - public function testArgumentParsing($rawArgs, $parsedArgs, $message) - { - $this->cli->run($rawArgs); - - $this->assertEquals(count(TaskMock::$instances), 1); - - $task = TaskMock::$instances[0]; - - $this->assertEquals($task->getArguments(), $parsedArgs, $message); - } - - /** - * Checks whether multiple tasks in one command are correctly run with - * their respective options. - */ - public function testMultipleTaskExecution() - { - $this->cli->run(array( - 'doctrine', - 'Core:task-mock', - '--option=', - 'Core:task-mock', - '--bool' - )); - - $this->assertEquals(count(TaskMock::$instances), 2); - - $task0 = TaskMock::$instances[0]; - $task1 = TaskMock::$instances[1]; - - $this->assertEquals($task0->getRunCounter(), 1); - $this->assertEquals($task1->getRunCounter(), 1); - - $this->assertEquals($task0->getArguments(), array('option' => array())); - $this->assertEquals($task1->getArguments(), array('bool' => true)); - } -} diff --git a/tests/Doctrine/Tests/Common/CLI/ConfigurationTest.php b/tests/Doctrine/Tests/Common/CLI/ConfigurationTest.php deleted file mode 100644 index 0d9e9d9b2..000000000 --- a/tests/Doctrine/Tests/Common/CLI/ConfigurationTest.php +++ /dev/null @@ -1,23 +0,0 @@ -setAttribute('name', 'value'); - - $this->assertTrue($config->hasAttribute('name')); - $this->assertEquals('value', $config->hasAttribute('name')); - - $config->setAttribute('name'); - - $this->assertFalse($config->hasAttribute('name')); - } -} \ No newline at end of file diff --git a/tests/Doctrine/Tests/Common/CLI/OptionGroupTest.php b/tests/Doctrine/Tests/Common/CLI/OptionGroupTest.php deleted file mode 100644 index fcd55f9fe..000000000 --- a/tests/Doctrine/Tests/Common/CLI/OptionGroupTest.php +++ /dev/null @@ -1,123 +0,0 @@ -_printer = new NormalPrinter(); - - $this->_options[0] = new Option('name', null, 'First option description'); - $this->_options[1] = new Option('another-name', 'value', 'Second option description'); - $this->_options[2] = new Option('third-name', array('value1', 'value2'), 'Third option description'); - } - - public function testCommonFunctionality() - { - $optionGroup = new OptionGroup(OptionGroup::CARDINALITY_0_N, $this->_options); - - $this->assertEquals(3, count($optionGroup->getOptions())); - - $this->assertEquals( - '--name First option description' . PHP_EOL . PHP_EOL . - '--another-name=value Second option description' . PHP_EOL . PHP_EOL . - '--third-name=value1,value2 Third option description' . PHP_EOL . PHP_EOL, - $optionGroup->formatWithDescription($this->_printer) - ); - - $optionGroup->clear(); - - $this->assertEquals(0, count($optionGroup->getOptions())); - $this->assertEquals('', $optionGroup->formatPlain($this->_printer)); - $this->assertEquals( - 'No available options' . PHP_EOL . PHP_EOL, - $optionGroup->formatWithDescription($this->_printer) - ); - - $optionGroup->addOption($this->_options[0]); - $optionGroup->addOption($this->_options[1]); - - $this->assertEquals(2, count($optionGroup->getOptions())); - } - - public function testCardinality0toN() - { - $optionGroup = new OptionGroup(OptionGroup::CARDINALITY_0_N, $this->_options); - - $this->assertEquals(OptionGroup::CARDINALITY_0_N, $optionGroup->getCardinality()); - - $this->assertEquals( - '[--name] [--another-name=value] [--third-name=value1,value2]', - $optionGroup->formatPlain($this->_printer) - ); - } - - public function testCardinality0to1() - { - $optionGroup = new OptionGroup(OptionGroup::CARDINALITY_0_1, $this->_options); - - $this->assertEquals(OptionGroup::CARDINALITY_0_1, $optionGroup->getCardinality()); - - $this->assertEquals( - '[--name | --another-name=value | --third-name=value1,value2]', - $optionGroup->formatPlain($this->_printer) - ); - } - - public function testCardinality1to1() - { - $optionGroup = new OptionGroup(OptionGroup::CARDINALITY_1_1, $this->_options); - - $this->assertEquals(OptionGroup::CARDINALITY_1_1, $optionGroup->getCardinality()); - - $this->assertEquals( - '(--name | --another-name=value | --third-name=value1,value2)', - $optionGroup->formatPlain($this->_printer) - ); - } - - public function testCardinality1toN() - { - $optionGroup = new OptionGroup(OptionGroup::CARDINALITY_1_N, $this->_options); - - $this->assertEquals(OptionGroup::CARDINALITY_1_N, $optionGroup->getCardinality()); - - $this->assertEquals( - '(--name --another-name=value --third-name=value1,value2)', - $optionGroup->formatPlain($this->_printer) - ); - } - - public function testCardinalityNtoN() - { - $optionGroup = new OptionGroup(OptionGroup::CARDINALITY_N_N, $this->_options); - - $this->assertEquals(OptionGroup::CARDINALITY_N_N, $optionGroup->getCardinality()); - - $this->assertEquals( - '--name --another-name=value --third-name=value1,value2', - $optionGroup->formatPlain($this->_printer) - ); - } - - public function testCardinalityMtoN() - { - $optionGroup = new OptionGroup(OptionGroup::CARDINALITY_M_N, $this->_options); - - $this->assertEquals(OptionGroup::CARDINALITY_M_N, $optionGroup->getCardinality()); - - $this->assertEquals( - '--name --another-name=value --third-name=value1,value2', - $optionGroup->formatPlain($this->_printer) - ); - } -} \ No newline at end of file diff --git a/tests/Doctrine/Tests/Common/CLI/OptionTest.php b/tests/Doctrine/Tests/Common/CLI/OptionTest.php deleted file mode 100644 index d6f68a928..000000000 --- a/tests/Doctrine/Tests/Common/CLI/OptionTest.php +++ /dev/null @@ -1,40 +0,0 @@ -assertEquals('name', $option->getName()); - $this->assertEquals('value', $option->getDefaultValue()); - $this->assertEquals('Description', $option->getDescription()); - } - - public function testStringCastWithDefaultValue() - { - $option = new Option('name', 'value', 'Description'); - - $this->assertEquals('--name=value', (string) $option); - } - - public function testStringCastWithoutDefaultValue() - { - $option = new Option('name', null, 'Description'); - - $this->assertEquals('--name', (string) $option); - } - - public function testStringCastWithArrayDefaultValue() - { - $option = new Option('name', array('value1', 'value2'), 'Description'); - - $this->assertEquals('--name=value1,value2', (string) $option); - } -} \ No newline at end of file diff --git a/tests/Doctrine/Tests/Common/CLI/StyleTest.php b/tests/Doctrine/Tests/Common/CLI/StyleTest.php deleted file mode 100644 index cdc956b5a..000000000 --- a/tests/Doctrine/Tests/Common/CLI/StyleTest.php +++ /dev/null @@ -1,19 +0,0 @@ - true)); - - $this->assertEquals('BLACK', $style->getForeground()); - $this->assertEquals('WHITE', $style->getBackground()); - $this->assertEquals(array('BOLD' => true), $style->getOptions()); - } -} \ No newline at end of file diff --git a/tests/Doctrine/Tests/TestInit.php b/tests/Doctrine/Tests/TestInit.php index c6b0e29f8..1c7bea434 100644 --- a/tests/Doctrine/Tests/TestInit.php +++ b/tests/Doctrine/Tests/TestInit.php @@ -13,6 +13,9 @@ require_once __DIR__ . '/../../../lib/Doctrine/Common/ClassLoader.php'; $classLoader = new \Doctrine\Common\ClassLoader('Doctrine'); $classLoader->register(); +$classLoader = new \Doctrine\Common\ClassLoader('Symfony', __DIR__ . "/../../../lib/vendor"); +$classLoader->register(); + if (!file_exists(__DIR__."/Proxies")) { if (!mkdir(__DIR__."/Proxies")) { throw new Exception("Could not create " . __DIR__."/Proxies Folder."); @@ -24,15 +27,6 @@ if (!file_exists(__DIR__."/ORM/Proxy/generated")) { } } -spl_autoload_register(function($class) { - if (strpos($class, 'Symfony') === 0) { - $file = str_replace("\\", "/", $class); - if (@fopen($class, "r")) { - require_once ($file); - } - } -}); - set_include_path( __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'lib' . PATH_SEPARATOR . From 7cc56c45d334f6e9d2c21de3c8e90d8734d26285 Mon Sep 17 00:00:00 2001 From: "Roman S. Borschel" Date: Sat, 10 Apr 2010 00:00:36 +0200 Subject: [PATCH 3/3] [DDC-193] Fixed. --- UPGRADE_TO_2_0 | 2 +- doctrine-mapping.xsd | 9 ++- lib/Doctrine/Common/EventArgs.php | 2 +- lib/Doctrine/Common/EventSubscriber.php | 7 +-- .../ORM/Internal/Hydration/ObjectHydrator.php | 9 +-- lib/Doctrine/ORM/Mapping/ClassMetadata.php | 1 - .../ORM/Mapping/ClassMetadataInfo.php | 58 +------------------ .../ORM/Mapping/Driver/AbstractFileDriver.php | 12 ++-- .../ORM/Mapping/Driver/AnnotationDriver.php | 4 +- .../ORM/Mapping/Driver/DatabaseDriver.php | 4 +- .../Mapping/Driver/DoctrineAnnotations.php | 2 - .../ORM/Mapping/Driver/DriverChain.php | 6 +- lib/Doctrine/ORM/Mapping/Driver/PhpDriver.php | 1 - lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 29 +++++++--- .../ORM/Mapping/Driver/YamlDriver.php | 14 ++++- .../ORM/Mapping/ManyToManyMapping.php | 12 ++-- lib/Doctrine/ORM/Mapping/OneToOneMapping.php | 14 ++--- lib/Doctrine/ORM/PersistentCollection.php | 17 +----- .../AbstractCollectionPersister.php | 2 +- .../Persisters/StandardEntityPersister.php | 4 +- lib/Doctrine/ORM/UnitOfWork.php | 8 +-- .../Doctrine/Tests/Models/CMS/CmsAddress.php | 12 ++-- .../Doctrine/Tests/Models/CMS/CmsArticle.php | 2 +- .../Doctrine/Tests/Models/CMS/CmsComment.php | 2 +- .../Doctrine/Tests/Models/CMS/CmsEmployee.php | 4 +- tests/Doctrine/Tests/Models/CMS/CmsGroup.php | 4 +- .../Tests/Models/CMS/CmsPhonenumber.php | 4 +- tests/Doctrine/Tests/Models/CMS/CmsUser.php | 2 +- .../Tests/Models/Company/CompanyEvent.php | 4 +- .../Tests/Models/Company/CompanyPerson.php | 4 +- .../Tests/Models/Company/CompanyRaffle.php | 2 +- .../Tests/Models/ECommerce/ECommerceCart.php | 6 +- .../Models/ECommerce/ECommerceCategory.php | 2 +- .../Models/ECommerce/ECommerceFeature.php | 6 +- .../Models/ECommerce/ECommerceProduct.php | 10 ++-- .../Models/ECommerce/ECommerceShipping.php | 2 +- .../Tests/Models/Forum/ForumBoard.php | 2 +- .../Doctrine/Tests/Models/Forum/ForumUser.php | 3 +- .../Tests/Models/Generic/DateTimeModel.php | 2 +- .../Tests/Models/Routing/RoutingLeg.php | 7 +-- .../Tests/Models/Routing/RoutingLocation.php | 3 +- .../Tests/Models/Routing/RoutingRoute.php | 2 +- .../Models/Routing/RoutingRouteBooking.php | 4 +- .../ORM/Functional/Ticket/DDC144Test.php | 8 +-- .../ORM/Functional/Ticket/DDC199Test.php | 8 +-- .../ORM/Functional/Ticket/DDC211Test.php | 2 +- .../ORM/Functional/Ticket/DDC237Test.php | 6 +- .../ORM/Functional/Ticket/DDC279Test.php | 8 +-- .../ORM/Functional/Ticket/DDC309Test.php | 4 +- .../ORM/Functional/Ticket/DDC345Test.php | 4 +- .../ORM/Functional/Ticket/DDC353Test.php | 3 +- .../ORM/Functional/Ticket/DDC371Test.php | 2 +- .../ORM/Functional/Ticket/DDC381Test.php | 2 +- .../Tests/ORM/Functional/Ticket/Ticket69.php | 4 +- .../ORM/Mapping/AbstractMappingDriverTest.php | 5 +- .../Tests/ORM/Mapping/ClassMetadataTest.php | 4 +- .../php/Doctrine.Tests.ORM.Mapping.User.php | 1 + .../Doctrine.Tests.ORM.Mapping.User.dcm.xml | 2 +- .../Doctrine.Tests.ORM.Mapping.User.dcm.yml | 1 + 59 files changed, 159 insertions(+), 211 deletions(-) diff --git a/UPGRADE_TO_2_0 b/UPGRADE_TO_2_0 index fb34f1f9a..379d364db 100644 --- a/UPGRADE_TO_2_0 +++ b/UPGRADE_TO_2_0 @@ -46,7 +46,7 @@ Prefer PHP default values, if possible. ## Partial Objects -xxx +[TBD: New syntax, results, etc.] ## XML Mapping Driver diff --git a/doctrine-mapping.xsd b/doctrine-mapping.xsd index 51dc089f9..f3bea4f8e 100644 --- a/doctrine-mapping.xsd +++ b/doctrine-mapping.xsd @@ -217,7 +217,7 @@ - + @@ -237,6 +237,7 @@ + @@ -246,7 +247,7 @@ - + @@ -264,6 +265,7 @@ + @@ -274,9 +276,10 @@ + - + diff --git a/lib/Doctrine/Common/EventArgs.php b/lib/Doctrine/Common/EventArgs.php index bfd05b4dc..6a3c0699a 100644 --- a/lib/Doctrine/Common/EventArgs.php +++ b/lib/Doctrine/Common/EventArgs.php @@ -26,7 +26,7 @@ namespace Doctrine\Common; * * This class contains no event data. It is used by events that do not pass state * information to an event handler when an event is raised. The single empty EventArgs - * instance can be obtained through {@link getEmptyInstance()}. + * instance can be obtained through {@link getEmptyInstance}. * * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link www.doctrine-project.org diff --git a/lib/Doctrine/Common/EventSubscriber.php b/lib/Doctrine/Common/EventSubscriber.php index d095af094..8e55973bd 100644 --- a/lib/Doctrine/Common/EventSubscriber.php +++ b/lib/Doctrine/Common/EventSubscriber.php @@ -16,7 +16,7 @@ * * This software consists of voluntary contributions made by many individuals * and is licensed under the LGPL. For more information, see - * . + * . */ namespace Doctrine\Common; @@ -24,13 +24,12 @@ namespace Doctrine\Common; /** * An EventSubscriber knows himself what events he is interested in. * If an EventSubscriber is added to an EventManager, the manager invokes - * getSubscribedEvents() and registers the subscriber as a listener for all + * {@link getSubscribedEvents} and registers the subscriber as a listener for all * returned events. * * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link www.doctrine-project.org * @since 2.0 - * @version $Revision: 3938 $ * @author Guilherme Blanco * @author Jonathan Wage * @author Roman Borschel @@ -38,7 +37,7 @@ namespace Doctrine\Common; interface EventSubscriber { /** - * Returns an array of events that this subscriber listens + * Returns an array of events this subscriber wants to listen to. * * @return array */ diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index cc13676d6..ffab1a334 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -87,8 +87,8 @@ class ObjectHydrator extends AbstractHydrator if ($assoc->mappedBy) { $this->_hints['fetched'][$className][$assoc->mappedBy] = true; } else { - if (isset($class->inverseMappings[$sourceClassName][$assoc->sourceFieldName])) { - $inverseAssoc = $class->inverseMappings[$sourceClassName][$assoc->sourceFieldName]; + if ($assoc->inversedBy) { + $inverseAssoc = $class->associationMappings[$assoc->inversedBy]; if ($inverseAssoc->isOneToOne()) { $this->_hints['fetched'][$className][$inverseAssoc->sourceFieldName] = true; if ($class->subClasses) { @@ -346,9 +346,10 @@ class ObjectHydrator extends AbstractHydrator $this->_uow->setOriginalEntityProperty($oid, $relationField, $element); $targetClass = $this->_ce[$relation->targetEntityName]; if ($relation->isOwningSide) { + //TODO: Just check hints['fetched'] here? // If there is an inverse mapping on the target class its bidirectional - if (isset($targetClass->inverseMappings[$relation->sourceEntityName][$relationField])) { - $inverseAssoc = $targetClass->inverseMappings[$relation->sourceEntityName][$relationField]; + if ($relation->inversedBy) { + $inverseAssoc = $targetClass->associationMappings[$relation->inversedBy]; if ($inverseAssoc->isOneToOne()) { $targetClass->reflFields[$inverseAssoc->sourceFieldName]->setValue($element, $parentObject); $this->_uow->setOriginalEntityProperty(spl_object_hash($element), $inverseAssoc->sourceFieldName, $parentObject); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadata.php b/lib/Doctrine/ORM/Mapping/ClassMetadata.php index 92f403324..aa16d865d 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadata.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadata.php @@ -315,7 +315,6 @@ class ClassMetadata extends ClassMetadataInfo 'idGenerator', //TODO: Does not really need to be serialized. Could be moved to runtime. 'inheritanceType', 'inheritedAssociationFields', - 'inverseMappings', //TODO: Remove! DDC-193 'isIdentifierComposite', 'isMappedSuperclass', 'isVersioned', diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php index a38bb1b99..b3ed57d98 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php @@ -127,9 +127,9 @@ class ClassMetadataInfo public $namespace; /** - * READ-ONLY: The name of the entity class that is at the root of the entity inheritance - * hierarchy. If the entity is not part of an inheritance hierarchy this is the same - * as $_entityName. + * READ-ONLY: The name of the entity class that is at the root of the mapped entity inheritance + * hierarchy. If the entity is not part of a mapped inheritance hierarchy this is the same + * as {@link $entityName}. * * @var string */ @@ -312,14 +312,6 @@ class ClassMetadataInfo */ public $associationMappings = array(); - /** - * READ-ONLY: List of inverse association mappings, indexed by mappedBy field name. - * - * @var array - * @todo Remove! See http://www.doctrine-project.org/jira/browse/DDC-193 - */ - public $inverseMappings = array(); - /** * READ-ONLY: Flag indicating whether the identifier/primary key of the class is composite. * @@ -531,34 +523,6 @@ class ClassMetadataInfo return $this->associationMappings[$fieldName]; } - /** - * Gets the inverse association mapping for the given target class name and - * owning fieldname. - * - * @param string $mappedByFieldName The field on the - * @return Doctrine\ORM\Mapping\AssociationMapping The mapping or NULL if there is no such - * inverse association mapping. - */ - public function getInverseAssociationMapping($targetClassName, $mappedByFieldName) - { - return isset($this->inverseMappings[$targetClassName][$mappedByFieldName]) ? - $this->inverseMappings[$targetClassName][$mappedByFieldName] : null; - } - - /** - * Checks whether the class has an inverse association mapping that points to the - * specified class and ha the specified mappedBy field. - * - * @param string $targetClassName The name of the target class. - * @param string $mappedByFieldName The name of the mappedBy field that points to the field on - * the target class that owns the association. - * @return boolean - */ - public function hasInverseAssociationMapping($targetClassName, $mappedByFieldName) - { - return isset($this->inverseMappings[$targetClassName][$mappedByFieldName]); - } - /** * Gets all association mappings of the class. * @@ -1063,7 +1027,6 @@ class ClassMetadataInfo if ($owningClassName !== null) { $this->inheritedAssociationFields[$sourceFieldName] = $owningClassName; } - $this->_registerMappingIfInverse($mapping); } /** @@ -1093,20 +1056,6 @@ class ClassMetadataInfo $this->_storeAssociationMapping($oneToOneMapping); } - /** - * Registers the mapping as an inverse mapping, if it is a mapping on the - * inverse side of an association mapping. - * - * @param AssociationMapping The mapping to register as inverse if it is a mapping - * for the inverse side of an association. - */ - private function _registerMappingIfInverse(AssociationMapping $assoc) - { - if ( ! $assoc->isOwningSide) { - $this->inverseMappings[$assoc->targetEntityName][$assoc->mappedBy] = $assoc; - } - } - /** * Adds a one-to-many mapping. * @@ -1154,7 +1103,6 @@ class ClassMetadataInfo throw MappingException::duplicateFieldMapping($this->name, $sourceFieldName); } $this->associationMappings[$sourceFieldName] = $assocMapping; - $this->_registerMappingIfInverse($assocMapping); } /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/AbstractFileDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AbstractFileDriver.php index daab7b531..29dedf3e1 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AbstractFileDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AbstractFileDriver.php @@ -55,7 +55,7 @@ abstract class AbstractFileDriver implements Driver * @var string */ protected $_fileExtension; - + /** * Initializes a new FileDriver that looks in the given path(s) for mapping * documents and operates in the specified operating mode. @@ -76,7 +76,7 @@ abstract class AbstractFileDriver implements Driver { $this->_paths = array_unique(array_merge($this->_paths, $paths)); } - + /** * Retrieve the defined metadata lookup paths. * @@ -107,7 +107,7 @@ abstract class AbstractFileDriver implements Driver { $this->_fileExtension = $fileExtension; } - + /** * Get the element of schema meta data for the class from the mapping file. * This will lazily load the mapping file if it is not loaded yet @@ -132,7 +132,7 @@ abstract class AbstractFileDriver implements Driver public function isTransient($className) { $fileName = str_replace('\\', '.', $className) . $this->_fileExtension; - + // Check whether file exists foreach ((array) $this->_paths as $path) { if (file_exists($path . DIRECTORY_SEPARATOR . $fileName)) { @@ -142,7 +142,7 @@ abstract class AbstractFileDriver implements Driver return true; } - + /** * Gets the names of all mapped classes known to this driver. * @@ -151,7 +151,7 @@ abstract class AbstractFileDriver implements Driver public function getAllClassNames() { $classes = array(); - + if ($this->_paths) { foreach ((array) $this->_paths as $path) { if ( ! is_dir($path)) { diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index e0a53394c..8e01479f7 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -173,7 +173,7 @@ class AnnotationDriver implements Driver // Evaluate InheritanceType annotation if (isset($classAnnotations['Doctrine\ORM\Mapping\InheritanceType'])) { $inheritanceTypeAnnot = $classAnnotations['Doctrine\ORM\Mapping\InheritanceType']; - $metadata->setInheritanceType(constant('\Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_' . $inheritanceTypeAnnot->value)); + $metadata->setInheritanceType(constant('Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_' . $inheritanceTypeAnnot->value)); } // Evaluate DiscriminatorColumn annotation @@ -195,7 +195,7 @@ class AnnotationDriver implements Driver // Evaluate DoctrineChangeTrackingPolicy annotation if (isset($classAnnotations['Doctrine\ORM\Mapping\ChangeTrackingPolicy'])) { $changeTrackingAnnot = $classAnnotations['Doctrine\ORM\Mapping\ChangeTrackingPolicy']; - $metadata->setChangeTrackingPolicy(constant('\Doctrine\ORM\Mapping\ClassMetadata::CHANGETRACKING_' . $changeTrackingAnnot->value)); + $metadata->setChangeTrackingPolicy(constant('Doctrine\ORM\Mapping\ClassMetadata::CHANGETRACKING_' . $changeTrackingAnnot->value)); } // Evaluate annotations on properties/fields diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index ecfc71102..083583ac7 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -29,7 +29,7 @@ use Doctrine\Common\Cache\ArrayCache, Doctrine\Common\Util\Inflector; /** - * The DatabaseDriver reverse engineers the mapping metadata from a database + * The DatabaseDriver reverse engineers the mapping metadata from a database. * * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link www.doctrine-project.org @@ -67,7 +67,7 @@ class DatabaseDriver implements Driver $columns = $this->_sm->listTableColumns($tableName); - if($this->_sm->getDatabasePlatform()->supportsForeignKeyConstraints()) { + if ($this->_sm->getDatabasePlatform()->supportsForeignKeyConstraints()) { $foreignKeys = $this->_sm->listTableForeignKeys($tableName); } else { $foreignKeys = array(); diff --git a/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php b/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php index 3c4e7415e..537aaf3a3 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php @@ -37,7 +37,6 @@ final class DiscriminatorColumn extends Annotation { public $length; } final class DiscriminatorMap extends Annotation {} -/*final class SubClasses extends Annotation {}*/ final class Id extends Annotation {} final class GeneratedValue extends Annotation { public $strategy = 'AUTO'; @@ -124,7 +123,6 @@ final class SequenceGenerator extends Annotation { public $initialValue = 1; } final class ChangeTrackingPolicy extends Annotation {} - final class OrderBy extends Annotation {} /* Annotations for lifecycle callbacks */ diff --git a/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php b/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php index dcc461840..cd2a727fe 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php @@ -46,7 +46,7 @@ class DriverChain implements Driver private $_drivers = array(); /** - * Add a nested driver + * Add a nested driver. * * @param Driver $nestedDriver * @param string $namespace @@ -57,7 +57,7 @@ class DriverChain implements Driver } /** - * Get the array of nested drivers + * Get the array of nested drivers. * * @return array $drivers */ @@ -74,7 +74,7 @@ class DriverChain implements Driver */ public function loadMetadataForClass($className, ClassMetadataInfo $metadata) { - foreach ($this->_drivers AS $namespace => $driver) { + foreach ($this->_drivers as $namespace => $driver) { if (strpos($className, $namespace) === 0) { $driver->loadMetadataForClass($className, $metadata); return; diff --git a/lib/Doctrine/ORM/Mapping/Driver/PhpDriver.php b/lib/Doctrine/ORM/Mapping/Driver/PhpDriver.php index 288637505..6b6954b83 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/PhpDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/PhpDriver.php @@ -49,7 +49,6 @@ class PhpDriver extends AbstractFileDriver * {@inheritdoc} */ protected $_fileExtension = '.php'; - protected $_metadata; /** diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index e02c3bdf5..40608d001 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -21,7 +21,8 @@ namespace Doctrine\ORM\Mapping\Driver; -use Doctrine\ORM\Mapping\ClassMetadataInfo, +use SimpleXMLElement, + Doctrine\ORM\Mapping\ClassMetadataInfo, Doctrine\ORM\Mapping\MappingException; /** @@ -226,6 +227,9 @@ class XmlDriver extends AbstractFileDriver if (isset($oneToOneElement['mapped-by'])) { $mapping['mappedBy'] = (string)$oneToOneElement['mapped-by']; } else { + if (isset($oneToOneElement['inversed-by'])) { + $mapping['inversedBy'] = (string)$oneToOneElement['inversed-by']; + } $joinColumns = array(); if (isset($oneToOneElement->{'join-column'})) { @@ -295,9 +299,13 @@ class XmlDriver extends AbstractFileDriver if (isset($manyToOneElement['fetch'])) { $mapping['fetch'] = constant('Doctrine\ORM\Mapping\AssociationMapping::FETCH_' . (string)$manyToOneElement['fetch']); } - + + if (isset($manyToOneElement['inversed-by'])) { + $mapping['inversedBy'] = (string)$manyToOneElement['inversed-by']; + } + $joinColumns = array(); - + if (isset($manyToOneElement->{'join-column'})) { $joinColumns[] = $this->_getJoinColumnMapping($manyToOneElement->{'join-column'}); } else if (isset($manyToOneElement->{'join-columns'})) { @@ -305,13 +313,12 @@ class XmlDriver extends AbstractFileDriver if (!isset($joinColumnElement['name'])) { $joinColumnElement['name'] = $name; } - $joinColumns[] = $this->_getJoinColumnMapping($joinColumnElement); } } - + $mapping['joinColumns'] = $joinColumns; - + if (isset($manyToOneElement->cascade)) { $mapping['cascade'] = $this->_getCascadeMappings($manyToOneElement->cascade); } @@ -339,11 +346,15 @@ class XmlDriver extends AbstractFileDriver if (isset($manyToManyElement['mapped-by'])) { $mapping['mappedBy'] = (string)$manyToManyElement['mapped-by']; } else if (isset($manyToManyElement->{'join-table'})) { + if (isset($manyToManyElement['inversed-by'])) { + $mapping['inversedBy'] = (string)$manyToManyElement['inversed-by']; + } + $joinTableElement = $manyToManyElement->{'join-table'}; $joinTable = array( 'name' => (string)$joinTableElement['name'] ); - + if (isset($joinTableElement['schema'])) { $joinTable['schema'] = (string)$joinTableElement['schema']; } @@ -382,7 +393,7 @@ class XmlDriver extends AbstractFileDriver // Evaluate if (isset($xmlRoot->{'lifecycle-callbacks'})) { foreach ($xmlRoot->{'lifecycle-callbacks'}->{'lifecycle-callback'} as $lifecycleCallback) { - $metadata->addLifecycleCallback((string)$lifecycleCallback['method'], constant('\Doctrine\ORM\Events::' . (string)$lifecycleCallback['type'])); + $metadata->addLifecycleCallback((string)$lifecycleCallback['method'], constant('Doctrine\ORM\Events::' . (string)$lifecycleCallback['type'])); } } } @@ -394,7 +405,7 @@ class XmlDriver extends AbstractFileDriver * @param $joinColumnElement The XML element. * @return array The mapping array. */ - private function _getJoinColumnMapping(\SimpleXMLElement $joinColumnElement) + private function _getJoinColumnMapping(SimpleXMLElement $joinColumnElement) { $joinColumn = array( 'name' => (string)$joinColumnElement['name'], diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index a1e9d8804..f5448ff1f 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -230,6 +230,10 @@ class YamlDriver extends AbstractFileDriver if (isset($oneToOneElement['mappedBy'])) { $mapping['mappedBy'] = $oneToOneElement['mappedBy']; } else { + if (isset($oneToOneElement['inversedBy'])) { + $mapping['inversedBy'] = $oneToOneElement['inversedBy']; + } + $joinColumns = array(); if (isset($oneToOneElement['joinColumn'])) { @@ -292,6 +296,10 @@ class YamlDriver extends AbstractFileDriver $mapping['fetch'] = constant('Doctrine\ORM\Mapping\AssociationMapping::FETCH_' . $manyToOneElement['fetch']); } + if (isset($manyToOneElement['inversedBy'])) { + $mapping['inversedBy'] = $manyToOneElement['inversedBy']; + } + $joinColumns = array(); if (isset($manyToOneElement['joinColumn'])) { @@ -331,6 +339,10 @@ class YamlDriver extends AbstractFileDriver if (isset($manyToManyElement['mappedBy'])) { $mapping['mappedBy'] = $manyToManyElement['mappedBy']; } else if (isset($manyToManyElement['joinTable'])) { + if (isset($manyToManyElement['inversedBy'])) { + $mapping['inversedBy'] = $manyToManyElement['inversedBy']; + } + $joinTableElement = $manyToManyElement['joinTable']; $joinTable = array( 'name' => $joinTableElement['name'] @@ -375,7 +387,7 @@ class YamlDriver extends AbstractFileDriver if (isset($element['lifecycleCallbacks'])) { foreach ($element['lifecycleCallbacks'] as $type => $methods) { foreach ($methods as $method) { - $metadata->addLifecycleCallback($method, constant('\Doctrine\ORM\Events::' . $type)); + $metadata->addLifecycleCallback($method, constant('Doctrine\ORM\Events::' . $type)); } } } diff --git a/lib/Doctrine/ORM/Mapping/ManyToManyMapping.php b/lib/Doctrine/ORM/Mapping/ManyToManyMapping.php index 3f92c63a7..95aad2b41 100644 --- a/lib/Doctrine/ORM/Mapping/ManyToManyMapping.php +++ b/lib/Doctrine/ORM/Mapping/ManyToManyMapping.php @@ -70,10 +70,7 @@ class ManyToManyMapping extends AssociationMapping public $orderBy; /** - * Validates and completes the mapping. - * - * @param array $mapping - * @override + * {@inheritdoc} */ protected function _validateAndCompleteMapping(array $mapping) { @@ -89,13 +86,15 @@ class ManyToManyMapping extends AssociationMapping 'joinColumns' => array( array( 'name' => $sourceShortName . '_id', - 'referencedColumnName' => 'id' + 'referencedColumnName' => 'id', + 'onDelete' => 'CASCADE' ) ), 'inverseJoinColumns' => array( array( 'name' => $targetShortName . '_id', - 'referencedColumnName' => 'id' + 'referencedColumnName' => 'id', + 'onDelete' => 'CASCADE' ) ) ); @@ -178,6 +177,7 @@ class ManyToManyMapping extends AssociationMapping $persister->loadManyToManyCollection($this, $joinTableConditions, $targetCollection); } + /** {@inheritdoc} */ public function isManyToMany() { return true; diff --git a/lib/Doctrine/ORM/Mapping/OneToOneMapping.php b/lib/Doctrine/ORM/Mapping/OneToOneMapping.php index 051d94324..c82558fb4 100644 --- a/lib/Doctrine/ORM/Mapping/OneToOneMapping.php +++ b/lib/Doctrine/ORM/Mapping/OneToOneMapping.php @@ -141,18 +141,14 @@ class OneToOneMapping extends AssociationMapping $targetClass = $em->getClassMetadata($this->targetEntityName); if ($this->isOwningSide) { - $inverseField = isset($targetClass->inverseMappings[$this->sourceEntityName][$this->sourceFieldName]) ? - $targetClass->inverseMappings[$this->sourceEntityName][$this->sourceFieldName]->sourceFieldName - : false; - // Mark inverse side as fetched in the hints, otherwise the UoW would // try to load it in a separate query (remember: to-one inverse sides can not be lazy). $hints = array(); - if ($inverseField) { - $hints['fetched'][$targetClass->name][$inverseField] = true; + if ($this->inversedBy) { + $hints['fetched'][$targetClass->name][$this->inversedBy] = true; if ($targetClass->subClasses) { foreach ($targetClass->subClasses as $targetSubclassName) { - $hints['fetched'][$targetSubclassName][$inverseField] = true; + $hints['fetched'][$targetSubclassName][$this->inversedBy] = true; } } } @@ -164,8 +160,8 @@ class OneToOneMapping extends AssociationMapping $targetEntity = $em->getUnitOfWork()->getEntityPersister($this->targetEntityName)->load($joinColumnValues, $targetEntity, $this, $hints); - if ($targetEntity !== null && $inverseField && ! $targetClass->isCollectionValuedAssociation($inverseField)) { - $targetClass->reflFields[$inverseField]->setValue($targetEntity, $sourceEntity); + if ($targetEntity !== null && $this->inversedBy && ! $targetClass->isCollectionValuedAssociation($this->inversedBy)) { + $targetClass->reflFields[$this->inversedBy]->setValue($targetEntity, $sourceEntity); } } else { $conditions = array(); diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index d19537c27..ef8e82dbf 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -134,18 +134,7 @@ final class PersistentCollection implements Collection { $this->_owner = $entity; $this->_association = $assoc; - - // Check for bidirectionality - //$this->_backRefFieldName = $assoc->inversedBy ?: $assoc->mappedBy; - if ( ! $assoc->isOwningSide) { - // For sure bi-directional - $this->_backRefFieldName = $assoc->mappedBy; - } else { - if (isset($this->_typeClass->inverseMappings[$assoc->sourceEntityName][$assoc->sourceFieldName])) { - // Bi-directional - $this->_backRefFieldName = $this->_typeClass->inverseMappings[$assoc->sourceEntityName][$assoc->sourceFieldName]->sourceFieldName; - } - } + $this->_backRefFieldName = $assoc->inversedBy ?: $assoc->mappedBy; } /** @@ -174,8 +163,8 @@ final class PersistentCollection implements Collection public function hydrateAdd($element) { $this->_coll->add($element); - // If _backRefFieldName is set, then the association is bidirectional - // and we need to set the back reference. + // If _backRefFieldName is set and its a one-to-many association, + // we need to set the back reference. if ($this->_backRefFieldName && $this->_association->isOneToMany()) { // Set back reference to owner $this->_typeClass->reflFields[$this->_backRefFieldName] diff --git a/lib/Doctrine/ORM/Persisters/AbstractCollectionPersister.php b/lib/Doctrine/ORM/Persisters/AbstractCollectionPersister.php index 9b40e6372..cf8c7ff8d 100644 --- a/lib/Doctrine/ORM/Persisters/AbstractCollectionPersister.php +++ b/lib/Doctrine/ORM/Persisters/AbstractCollectionPersister.php @@ -50,7 +50,7 @@ abstract class AbstractCollectionPersister protected $_uow; /** - * Initializes a new instance of a class derived from {@link AbstractCollectionPersister}. + * Initializes a new instance of a class derived from AbstractCollectionPersister. * * @param Doctrine\ORM\EntityManager $em */ diff --git a/lib/Doctrine/ORM/Persisters/StandardEntityPersister.php b/lib/Doctrine/ORM/Persisters/StandardEntityPersister.php index a02a9b191..cea3f37bd 100644 --- a/lib/Doctrine/ORM/Persisters/StandardEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/StandardEntityPersister.php @@ -492,8 +492,8 @@ class StandardEntityPersister if ($found = $this->_em->getUnitOfWork()->tryGetById($joinColumnValues, $targetClass->rootEntityName)) { $this->_class->reflFields[$field]->setValue($entity, $found); // Complete inverse side, if necessary. - if (isset($targetClass->inverseMappings[$this->_class->name][$field])) { - $inverseAssoc = $targetClass->inverseMappings[$this->_class->name][$field]; + if ($assoc->inversedBy) { + $inverseAssoc = $targetClass->associationMappings[$assoc->inversedBy]; $targetClass->reflFields[$inverseAssoc->sourceFieldName]->setValue($found, $entity); } $newData[$field] = $found; diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index d1a89bed4..46628c904 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -1336,12 +1336,12 @@ class UnitOfWork implements PropertyChangedListener // We need to fetch the managed copy in order to merge. $managedCopy = $this->_em->find($class->name, $id); } - + if ($managedCopy === null) { throw new \InvalidArgumentException('New entity detected during merge.' . ' Persist the new entity before merging.'); } - + if ($class->isVersioned) { $managedCopyVersion = $class->reflFields[$class->versionField]->getValue($managedCopy); $entityVersion = $class->reflFields[$class->versionField]->getValue($entity); @@ -1350,7 +1350,7 @@ class UnitOfWork implements PropertyChangedListener throw OptimisticLockException::lockFailed(); } } - + // Merge state of $entity into existing (managed) entity foreach ($class->reflFields as $name => $prop) { if ( ! isset($class->associationMappings[$name])) { @@ -1359,7 +1359,7 @@ class UnitOfWork implements PropertyChangedListener $assoc2 = $class->associationMappings[$name]; if ($assoc2->isOneToOne()) { if ( ! $assoc2->isCascadeMerge) { - $other = $class->reflFields[$name]->getValue($entity); + $other = $class->reflFields[$name]->getValue($entity); //TODO: Just $prop->getValue($entity)? if ($other !== null) { $targetClass = $this->_em->getClassMetadata($assoc2->targetEntityName); $id = $targetClass->getIdentifierValues($other); diff --git a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php index 746697d32..32af0fd85 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsAddress.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsAddress.php @@ -13,23 +13,22 @@ class CmsAddress { /** * @Column(type="integer") - * @Id - * @GeneratedValue(strategy="AUTO") + * @Id @GeneratedValue */ public $id; /** - * @Column(type="string", length=50) + * @Column(length=50) */ public $country; /** - * @Column(type="string", length=50) + * @Column(length=50) */ public $zip; /** - * @Column(type="string", length=50) + * @Column(length=50) */ public $city; @@ -39,8 +38,7 @@ class CmsAddress public $street; /** - * @OneToOne(targetEntity="CmsUser") -// * @JoinColumn(name="user_id", referencedColumnName="id") + * @OneToOne(targetEntity="CmsUser", inversedBy="address") */ public $user; diff --git a/tests/Doctrine/Tests/Models/CMS/CmsArticle.php b/tests/Doctrine/Tests/Models/CMS/CmsArticle.php index 53c49540c..1d7901557 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsArticle.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsArticle.php @@ -23,7 +23,7 @@ class CmsArticle */ public $text; /** - * @ManyToOne(targetEntity="CmsUser") + * @ManyToOne(targetEntity="CmsUser", inversedBy="articles") * @JoinColumn(name="user_id", referencedColumnName="id") */ public $user; diff --git a/tests/Doctrine/Tests/Models/CMS/CmsComment.php b/tests/Doctrine/Tests/Models/CMS/CmsComment.php index c1991474f..a40940bca 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsComment.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsComment.php @@ -23,7 +23,7 @@ class CmsComment */ public $text; /** - * @ManyToOne(targetEntity="CmsArticle") + * @ManyToOne(targetEntity="CmsArticle", inversedBy="comments") * @JoinColumn(name="article_id", referencedColumnName="id") */ public $article; diff --git a/tests/Doctrine/Tests/Models/CMS/CmsEmployee.php b/tests/Doctrine/Tests/Models/CMS/CmsEmployee.php index 9acdbc6f4..c1697150f 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsEmployee.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsEmployee.php @@ -14,12 +14,12 @@ class CmsEmployee /** * @Id * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @GeneratedValue */ private $id; /** - * @Column(type="string") + * @Column */ private $name; diff --git a/tests/Doctrine/Tests/Models/CMS/CmsGroup.php b/tests/Doctrine/Tests/Models/CMS/CmsGroup.php index 3bdfcba1f..ad399ba18 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsGroup.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsGroup.php @@ -18,11 +18,11 @@ class CmsGroup /** * @Id * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @GeneratedValue */ public $id; /** - * @Column(type="string", length=50) + * @Column(length=50) */ public $name; /** diff --git a/tests/Doctrine/Tests/Models/CMS/CmsPhonenumber.php b/tests/Doctrine/Tests/Models/CMS/CmsPhonenumber.php index 39fd7b8f3..431b8c8ae 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsPhonenumber.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsPhonenumber.php @@ -9,11 +9,11 @@ namespace Doctrine\Tests\Models\CMS; class CmsPhonenumber { /** - * @Id @Column(type="string", length=50) + * @Id @Column(length=50) */ public $phonenumber; /** - * @ManyToOne(targetEntity="CmsUser") + * @ManyToOne(targetEntity="CmsUser", inversedBy="phonenumbers") * @JoinColumn(name="user_id", referencedColumnName="id") */ public $user; diff --git a/tests/Doctrine/Tests/Models/CMS/CmsUser.php b/tests/Doctrine/Tests/Models/CMS/CmsUser.php index 148fa6674..d7f0727c0 100644 --- a/tests/Doctrine/Tests/Models/CMS/CmsUser.php +++ b/tests/Doctrine/Tests/Models/CMS/CmsUser.php @@ -40,7 +40,7 @@ class CmsUser */ public $address; /** - * @ManyToMany(targetEntity="CmsGroup", cascade={"persist"}) + * @ManyToMany(targetEntity="CmsGroup", inversedBy="users", cascade={"persist"}) * @JoinTable(name="cms_users_groups", * joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, * inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id")} diff --git a/tests/Doctrine/Tests/Models/Company/CompanyEvent.php b/tests/Doctrine/Tests/Models/Company/CompanyEvent.php index 12252a7d1..f0bb730cf 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyEvent.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyEvent.php @@ -11,12 +11,12 @@ namespace Doctrine\Tests\Models\Company; class CompanyEvent { /** * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @GeneratedValue */ private $id; /** - * @ManyToOne(targetEntity="CompanyOrganization",cascade={"persist"}) + * @ManyToOne(targetEntity="CompanyOrganization", inversedBy="events", cascade={"persist"}) * @JoinColumn(name="org_id", referencedColumnName="id") */ private $organization; diff --git a/tests/Doctrine/Tests/Models/Company/CompanyPerson.php b/tests/Doctrine/Tests/Models/Company/CompanyPerson.php index c38dc7428..740c323ef 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyPerson.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyPerson.php @@ -20,11 +20,11 @@ class CompanyPerson /** * @Id * @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @GeneratedValue */ private $id; /** - * @Column(type="string") + * @Column */ private $name; /** diff --git a/tests/Doctrine/Tests/Models/Company/CompanyRaffle.php b/tests/Doctrine/Tests/Models/Company/CompanyRaffle.php index a7d123c84..3d05996f2 100644 --- a/tests/Doctrine/Tests/Models/Company/CompanyRaffle.php +++ b/tests/Doctrine/Tests/Models/Company/CompanyRaffle.php @@ -4,7 +4,7 @@ namespace Doctrine\Tests\Models\Company; /** @Entity @Table(name="company_raffles") */ class CompanyRaffle extends CompanyEvent { - /** @Column(type="string") */ + /** @Column */ private $data; public function setData($data) { diff --git a/tests/Doctrine/Tests/Models/ECommerce/ECommerceCart.php b/tests/Doctrine/Tests/Models/ECommerce/ECommerceCart.php index 8fac69be0..d68b37056 100644 --- a/tests/Doctrine/Tests/Models/ECommerce/ECommerceCart.php +++ b/tests/Doctrine/Tests/Models/ECommerce/ECommerceCart.php @@ -17,17 +17,17 @@ class ECommerceCart /** * @Column(type="integer") * @Id - * @GeneratedValue(strategy="AUTO") + * @GeneratedValue */ private $id; /** - * @Column(type="string", length=50, nullable=true) + * @Column(length=50, nullable=true) */ private $payment; /** - * @OneToOne(targetEntity="ECommerceCustomer") + * @OneToOne(targetEntity="ECommerceCustomer", inversedBy="cart") * @JoinColumn(name="customer_id", referencedColumnName="id") */ private $customer; diff --git a/tests/Doctrine/Tests/Models/ECommerce/ECommerceCategory.php b/tests/Doctrine/Tests/Models/ECommerce/ECommerceCategory.php index d79c1a298..ea2ade09d 100644 --- a/tests/Doctrine/Tests/Models/ECommerce/ECommerceCategory.php +++ b/tests/Doctrine/Tests/Models/ECommerce/ECommerceCategory.php @@ -36,7 +36,7 @@ class ECommerceCategory private $children; /** - * @ManyToOne(targetEntity="ECommerceCategory") + * @ManyToOne(targetEntity="ECommerceCategory", inversedBy="children") * @JoinColumn(name="parent_id", referencedColumnName="id") */ private $parent; diff --git a/tests/Doctrine/Tests/Models/ECommerce/ECommerceFeature.php b/tests/Doctrine/Tests/Models/ECommerce/ECommerceFeature.php index 901e7c1e9..8f6cdd983 100644 --- a/tests/Doctrine/Tests/Models/ECommerce/ECommerceFeature.php +++ b/tests/Doctrine/Tests/Models/ECommerce/ECommerceFeature.php @@ -14,17 +14,17 @@ class ECommerceFeature /** * @Column(type="integer") * @Id - * @GeneratedValue(strategy="AUTO") + * @GeneratedValue */ private $id; /** - * @Column(type="string", length=50) + * @Column(length=50) */ private $description; /** - * @ManyToOne(targetEntity="ECommerceProduct") + * @ManyToOne(targetEntity="ECommerceProduct", inversedBy="features") * @JoinColumn(name="product_id", referencedColumnName="id") */ private $product; diff --git a/tests/Doctrine/Tests/Models/ECommerce/ECommerceProduct.php b/tests/Doctrine/Tests/Models/ECommerce/ECommerceProduct.php index 40fe67bd8..4851778e2 100644 --- a/tests/Doctrine/Tests/Models/ECommerce/ECommerceProduct.php +++ b/tests/Doctrine/Tests/Models/ECommerce/ECommerceProduct.php @@ -10,14 +10,14 @@ use Doctrine\Common\Collections\ArrayCollection; * * @author Giorgio Sironi * @Entity - * @Table(name="ecommerce_products",indexes={@index(name="name_idx", columns={"name"})}) + * @Table(name="ecommerce_products",indexes={@Index(name="name_idx", columns={"name"})}) */ class ECommerceProduct { /** * @Column(type="integer") * @Id - * @GeneratedValue(strategy="AUTO") + * @GeneratedValue */ private $id; @@ -38,7 +38,7 @@ class ECommerceProduct private $features; /** - * @ManyToMany(targetEntity="ECommerceCategory", cascade={"persist"}) + * @ManyToMany(targetEntity="ECommerceCategory", cascade={"persist"}, inversedBy="products") * @JoinTable(name="ecommerce_products_categories", * joinColumns={@JoinColumn(name="product_id", referencedColumnName="id")}, * inverseJoinColumns={@JoinColumn(name="category_id", referencedColumnName="id")}) @@ -50,8 +50,8 @@ class ECommerceProduct * simplicity. * @ManyToMany(targetEntity="ECommerceProduct", cascade={"persist"}) * @JoinTable(name="ecommerce_products_related", - joinColumns={@JoinColumn(name="product_id", referencedColumnName="id")}, - inverseJoinColumns={@JoinColumn(name="related_id", referencedColumnName="id")}) + * joinColumns={@JoinColumn(name="product_id", referencedColumnName="id")}, + * inverseJoinColumns={@JoinColumn(name="related_id", referencedColumnName="id")}) */ private $related; diff --git a/tests/Doctrine/Tests/Models/ECommerce/ECommerceShipping.php b/tests/Doctrine/Tests/Models/ECommerce/ECommerceShipping.php index b1ee90a53..a0f302cc2 100644 --- a/tests/Doctrine/Tests/Models/ECommerce/ECommerceShipping.php +++ b/tests/Doctrine/Tests/Models/ECommerce/ECommerceShipping.php @@ -14,7 +14,7 @@ class ECommerceShipping { /** * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @GeneratedValue */ private $id; diff --git a/tests/Doctrine/Tests/Models/Forum/ForumBoard.php b/tests/Doctrine/Tests/Models/Forum/ForumBoard.php index 6496dd9a1..707d36309 100644 --- a/tests/Doctrine/Tests/Models/Forum/ForumBoard.php +++ b/tests/Doctrine/Tests/Models/Forum/ForumBoard.php @@ -21,7 +21,7 @@ class ForumBoard */ public $position; /** - * @ManyToOne(targetEntity="ForumCategory") + * @ManyToOne(targetEntity="ForumCategory", inversedBy="boards") * @JoinColumn(name="category_id", referencedColumnName="id") */ public $category; diff --git a/tests/Doctrine/Tests/Models/Forum/ForumUser.php b/tests/Doctrine/Tests/Models/Forum/ForumUser.php index fedf10955..e27623160 100644 --- a/tests/Doctrine/Tests/Models/Forum/ForumUser.php +++ b/tests/Doctrine/Tests/Models/Forum/ForumUser.php @@ -10,8 +10,7 @@ class ForumUser { /** * @Column(type="integer") - * @Id - * @GeneratedValue(strategy="AUTO") + * @Id @GeneratedValue */ public $id; /** diff --git a/tests/Doctrine/Tests/Models/Generic/DateTimeModel.php b/tests/Doctrine/Tests/Models/Generic/DateTimeModel.php index 365268a54..0733245ff 100644 --- a/tests/Doctrine/Tests/Models/Generic/DateTimeModel.php +++ b/tests/Doctrine/Tests/Models/Generic/DateTimeModel.php @@ -10,7 +10,7 @@ class DateTimeModel { /** * @Id @Column(type="integer") - * @GeneratedValue(strategy="AUTO") + * @GeneratedValue */ public $id; /** diff --git a/tests/Doctrine/Tests/Models/Routing/RoutingLeg.php b/tests/Doctrine/Tests/Models/Routing/RoutingLeg.php index 64564d3ef..a130e7b0c 100644 --- a/tests/Doctrine/Tests/Models/Routing/RoutingLeg.php +++ b/tests/Doctrine/Tests/Models/Routing/RoutingLeg.php @@ -8,20 +8,19 @@ namespace Doctrine\Tests\Models\Routing; class RoutingLeg { /** - * @Id - * @generatedValue(strategy="AUTO") + * @Id @generatedValue * @column(type="integer") */ public $id; /** - * @ManyToOne(targetEntity="Doctrine\Tests\Models\Routing\RoutingLocation") + * @ManyToOne(targetEntity="RoutingLocation") * @JoinColumn(name="from_id", referencedColumnName="id") */ public $fromLocation; /** - * @ManyToOne(targetEntity="Doctrine\Tests\Models\Routing\RoutingLocation") + * @ManyToOne(targetEntity="RoutingLocation") * @JoinColumn(name="to_id", referencedColumnName="id") */ public $toLocation; diff --git a/tests/Doctrine/Tests/Models/Routing/RoutingLocation.php b/tests/Doctrine/Tests/Models/Routing/RoutingLocation.php index 2a04275e8..ea1ba55f7 100644 --- a/tests/Doctrine/Tests/Models/Routing/RoutingLocation.php +++ b/tests/Doctrine/Tests/Models/Routing/RoutingLocation.php @@ -8,8 +8,7 @@ namespace Doctrine\Tests\Models\Routing; class RoutingLocation { /** - * @Id - * @generatedValue(strategy="AUTO") + * @Id @GeneratedValue * @Column(type="integer") */ public $id; diff --git a/tests/Doctrine/Tests/Models/Routing/RoutingRoute.php b/tests/Doctrine/Tests/Models/Routing/RoutingRoute.php index 0f0f671c1..9e5d5d02e 100644 --- a/tests/Doctrine/Tests/Models/Routing/RoutingRoute.php +++ b/tests/Doctrine/Tests/Models/Routing/RoutingRoute.php @@ -11,7 +11,7 @@ class RoutingRoute { /** * @Id - * @generatedValue(strategy="AUTO") + * @GeneratedValue * @column(type="integer") */ public $id; diff --git a/tests/Doctrine/Tests/Models/Routing/RoutingRouteBooking.php b/tests/Doctrine/Tests/Models/Routing/RoutingRouteBooking.php index ea2f31f60..9b862fc39 100644 --- a/tests/Doctrine/Tests/Models/Routing/RoutingRouteBooking.php +++ b/tests/Doctrine/Tests/Models/Routing/RoutingRouteBooking.php @@ -10,12 +10,12 @@ class RoutingRouteBooking /** * @Id * @Column(type="integer") - * @generatedValue(strategy="AUTO") + * @GeneratedValue */ public $id; /** - * @ManyToOne(targetEntity="RoutingRoute") + * @ManyToOne(targetEntity="RoutingRoute", inversedBy="bookings") * @JoinColumn(name="route_id", referencedColumnName="id") */ public $route; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC144Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC144Test.php index 6c248676b..9b493e7da 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC144Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC144Test.php @@ -43,21 +43,21 @@ class DDC144Test extends \Doctrine\Tests\OrmFunctionalTestCase */ class DDC144FlowElement { /** - * @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") + * @Id @Column(type="integer") @GeneratedValue * @var integer */ public $id; - /** @Column(type="string") */ + /** @Column */ public $property; } -// /** @Entity @Table(name="ddc144_expressions") */ abstract class DDC144Expression extends DDC144FlowElement { abstract function method(); } + /** @Entity @Table(name="ddc144_operands") */ class DDC144Operand extends DDC144Expression { - /** @Column(type="string") */ + /** @Column */ public $operandProperty; function method() {} } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php index 08ed3ef94..e912c389f 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC199Test.php @@ -79,7 +79,7 @@ class DDC199ParentClass class DDC199ChildClass extends DDC199ParentClass { /** - * @Column(type="string") + * @Column */ public $childData; } @@ -87,13 +87,13 @@ class DDC199ChildClass extends DDC199ParentClass /** @Entity @Table(name="ddc199_relatedclass") */ class DDC199RelatedClass { - /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ + /** @Id @Column(type="integer") @GeneratedValue */ public $id; - /** @Column(type="string") */ + /** @Column */ public $relatedData; /** - * @ManyToOne(targetEntity="DDC199ParentClass") + * @ManyToOne(targetEntity="DDC199ParentClass", inversedBy="relatedEntities") * @JoinColumn(name="parent_id", referencedColumnName="id") */ public $parent; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php index 56a3ddcc8..27abee236 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC211Test.php @@ -65,7 +65,7 @@ class DDC211User protected $name; /** - * @ManyToMany(targetEntity="DDC211Group") + * @ManyToMany(targetEntity="DDC211Group", inversedBy="users") * @JoinTable(name="user_groups", * joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, * inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id")} diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php index 877b3b861..6dc23c895 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC237Test.php @@ -68,7 +68,7 @@ class DDC237Test extends \Doctrine\Tests\OrmFunctionalTestCase class DDC237EntityX { /** - * @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") + * @Id @Column(type="integer") @GeneratedValue */ public $id; /** @@ -87,7 +87,7 @@ class DDC237EntityX class DDC237EntityY { /** - * @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") + * @Id @Column(type="integer") @GeneratedValue */ public $id; /** @@ -99,7 +99,7 @@ class DDC237EntityY /** @Entity @Table(name="ddc237_z") */ class DDC237EntityZ { - /** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */ + /** @Id @Column(type="integer") @GeneratedValue */ public $id; /** @Column(type="string") */ public $data; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php index e3d4d1949..50bc5ec1a 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC279Test.php @@ -68,7 +68,7 @@ abstract class DDC279EntityXAbstract { /** * @Id - * @generatedValue(strategy="AUTO") + * @GeneratedValue * @Column(name="id", type="integer") */ public $id; @@ -98,8 +98,7 @@ class DDC279EntityX extends DDC279EntityXAbstract class DDC279EntityY { /** - * @Id - * @generatedValue(strategy="AUTO") + * @Id @GeneratedValue * @Column(name="id", type="integer") */ public $id; @@ -122,8 +121,7 @@ class DDC279EntityY class DDC279EntityZ { /** - * @Id - * @generatedValue(strategy="AUTO") + * @Id @GeneratedValue * @Column(name="id", type="integer") */ public $id; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php index 728e11d25..325ce8d75 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC309Test.php @@ -54,7 +54,7 @@ class DDC309Country /** * @Id * @Column(name="id", type="integer") - * @GeneratedValue(strategy="AUTO") + * @GeneratedValue */ public $id; } @@ -67,7 +67,7 @@ class DDC309User /** * @Id * @Column(name="id", type="integer") - * @GeneratedValue(strategy="AUTO") + * @GeneratedValue */ public $id; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC345Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC345Test.php index 6ae373229..63a084c87 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC345Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC345Test.php @@ -118,13 +118,13 @@ class DDC345Membership public $id; /** - * @OneToOne(targetEntity="DDC345User") + * @OneToOne(targetEntity="DDC345User", inversedBy="Memberships") * @JoinColumn(name="user_id", referencedColumnName="id", nullable=false) */ public $user; /** - * @OneToOne(targetEntity="DDC345Group") + * @OneToOne(targetEntity="DDC345Group", inversedBy="Memberships") * @JoinColumn(name="group_id", referencedColumnName="id", nullable=false) */ public $group; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php index 8d645121d..5091cd44c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC353Test.php @@ -78,8 +78,7 @@ class DDC353Picture { /** * @Column(name="picture_id", type="integer") - * @Id - * @GeneratedValue(strategy="AUTO") + * @Id @GeneratedValue */ private $pictureId; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php index 8f18a1fc6..399e35c34 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC371Test.php @@ -53,7 +53,7 @@ class DDC371Child { private $id; /** @Column(type="string") */ public $data; - /** @ManyToOne(targetEntity="DDC371Parent") @JoinColumn(name="parentId") */ + /** @ManyToOne(targetEntity="DDC371Parent", inversedBy="children") @JoinColumn(name="parentId") */ public $parent; } diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php index a088ba8cf..c25a8aa75 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC381Test.php @@ -47,7 +47,7 @@ class DDC381Test extends \Doctrine\Tests\OrmFunctionalTestCase class DDC381Entity { /** - * @Id @Column(type="integer") @generatedValue + * @Id @Column(type="integer") @GeneratedValue */ protected $id; diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket69.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket69.php index 8b59b4bf3..f6ef6c3bf 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket69.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/Ticket69.php @@ -212,7 +212,7 @@ class Relation { /** * @var Lemma - * @ManyToOne(targetEntity="Lemma") + * @ManyToOne(targetEntity="Lemma", inversedBy="relations") * @JoinColumn(name="relation_parent_id", referencedColumnName="lemma_id") */ private $parent; @@ -226,7 +226,7 @@ class Relation { /** * @var RelationType - * @ManyToOne(targetEntity="RelationType") + * @ManyToOne(targetEntity="RelationType", inversedBy="relations") * @JoinColumn(name="relation_type_id", referencedColumnName="relation_type_id") */ private $type; diff --git a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php index 9e03211a6..8b29c6bad 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/AbstractMappingDriverTest.php @@ -73,7 +73,6 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase public function testAssocations($class) { $this->assertEquals(3, count($class->associationMappings)); - $this->assertEquals(1, count($class->inverseMappings)); return $class; } @@ -87,6 +86,7 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase $this->assertTrue($class->associationMappings['address'] instanceof \Doctrine\ORM\Mapping\OneToOneMapping); $this->assertTrue(isset($class->associationMappings['address'])); $this->assertTrue($class->associationMappings['address']->isOwningSide); + $this->assertEquals('user', $class->associationMappings['address']->inversedBy); // Check cascading $this->assertTrue($class->associationMappings['address']->isCascadeRemove); $this->assertFalse($class->associationMappings['address']->isCascadePersist); @@ -223,13 +223,12 @@ class User public $email; /** - * @OneToOne(targetEntity="Address", cascade={"remove"}) + * @OneToOne(targetEntity="Address", cascade={"remove"}, inversedBy="user") * @JoinColumn(onDelete="CASCADE", onUpdate="CASCADE") */ public $address; /** - * * @OneToMany(targetEntity="Phonenumber", mappedBy="user", cascade={"persist"}) * @OrderBy({"number"="ASC"}) */ diff --git a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php index 11fb49948..dcc6b8210 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php +++ b/tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php @@ -100,8 +100,8 @@ class ClassMetadataTest extends \Doctrine\Tests\OrmTestCase $this->assertTrue($assoc instanceof \Doctrine\ORM\Mapping\ManyToManyMapping); $this->assertEquals(array( 'name' => 'CmsUser_CmsGroup', - 'joinColumns' => array(array('name' => 'CmsUser_id', 'referencedColumnName' => 'id')), - 'inverseJoinColumns' => array(array('name' => 'CmsGroup_id', 'referencedColumnName' => 'id')) + 'joinColumns' => array(array('name' => 'CmsUser_id', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE')), + 'inverseJoinColumns' => array(array('name' => 'CmsGroup_id', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE')) ), $assoc->joinTable); } diff --git a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php index 7bd7fcaf4..e2a057f14 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php +++ b/tests/Doctrine/Tests/ORM/Mapping/php/Doctrine.Tests.ORM.Mapping.User.php @@ -39,6 +39,7 @@ $metadata->mapOneToOne(array( 0 => 'remove', ), 'mappedBy' => NULL, + 'inversedBy' => 'user', 'joinColumns' => array( 0 => diff --git a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml index 776185a28..65b71f04c 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml +++ b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.ORM.Mapping.User.dcm.xml @@ -20,7 +20,7 @@ - + diff --git a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml index 5e239da3f..3cf687169 100644 --- a/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml +++ b/tests/Doctrine/Tests/ORM/Mapping/yaml/Doctrine.Tests.ORM.Mapping.User.dcm.yml @@ -19,6 +19,7 @@ Doctrine\Tests\ORM\Mapping\User: oneToOne: address: targetEntity: Address + inversedBy: user joinColumn: name: address_id referencedColumnName: id