From aa0cb0b6d71eefded075e8063387a6c0e545722e Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Tue, 24 Jul 2012 11:37:57 +0200 Subject: [PATCH 1/2] DDC-1939 - Removing references to non-existing AssociationMapping class --- lib/Doctrine/ORM/PersistentCollection.php | 2 +- lib/Doctrine/ORM/Persisters/ManyToManyPersister.php | 2 +- lib/Doctrine/ORM/Proxy/ProxyFactory.php | 1 - lib/Doctrine/ORM/Query/QueryException.php | 2 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 1 - lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php | 1 - 6 files changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index 4a8ca0610..19fae830d 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -294,7 +294,7 @@ final class PersistentCollection implements Collection, Selectable /** * INTERNAL: Gets the association mapping of the collection. * - * @return \Doctrine\ORM\Mapping\AssociationMapping + * @return array */ public function getMapping() { diff --git a/lib/Doctrine/ORM/Persisters/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/ManyToManyPersister.php index 23e41786c..3f0f1f859 100644 --- a/lib/Doctrine/ORM/Persisters/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/ManyToManyPersister.php @@ -198,7 +198,7 @@ class ManyToManyPersister extends AbstractCollectionPersister } // Composite identifier - $sourceClass = $this->_em->getClassMetadata(get_class($mapping->getOwner())); + $sourceClass = $this->_em->getClassMetadata(get_class($coll->getOwner())); foreach ($mapping['relationToSourceKeyColumns'] as $srcColumn) { $params[] = $identifier[$sourceClass->fieldNames[$srcColumn]]; diff --git a/lib/Doctrine/ORM/Proxy/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/ProxyFactory.php index fbac7155b..df74207e7 100644 --- a/lib/Doctrine/ORM/Proxy/ProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/ProxyFactory.php @@ -21,7 +21,6 @@ namespace Doctrine\ORM\Proxy; use Doctrine\ORM\EntityManager, Doctrine\ORM\Mapping\ClassMetadata, - Doctrine\ORM\Mapping\AssociationMapping, Doctrine\Common\Util\ClassUtils; /** diff --git a/lib/Doctrine/ORM/Query/QueryException.php b/lib/Doctrine/ORM/Query/QueryException.php index fac741eed..6a03c8c50 100644 --- a/lib/Doctrine/ORM/Query/QueryException.php +++ b/lib/Doctrine/ORM/Query/QueryException.php @@ -96,7 +96,7 @@ class QueryException extends \Doctrine\ORM\ORMException } /** - * @param \Doctrine\ORM\Mapping\AssociationMapping $assoc + * @param array $assoc */ public static function iterateWithFetchJoinCollectionNotAllowed($assoc) { diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index f92cd19c5..3cd1ed59b 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -20,7 +20,6 @@ namespace Doctrine\ORM\Tools; use Doctrine\ORM\Mapping\ClassMetadataInfo, - Doctrine\ORM\Mapping\AssociationMapping, Doctrine\Common\Util\Inflector, Doctrine\DBAL\Types\Type; diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php index 9ce1bbb7c..d1ec92ab4 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AnnotationExporter.php @@ -20,7 +20,6 @@ namespace Doctrine\ORM\Tools\Export\Driver; use Doctrine\ORM\Mapping\ClassMetadataInfo, - Doctrine\ORM\Mapping\AssociationMapping, Doctrine\ORM\Tools\EntityGenerator; /** From 354fa14df450cd8752ef468eaafb1749448dfd92 Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Sun, 29 Jul 2012 09:27:08 +0200 Subject: [PATCH 2/2] [DDC-1939] Add test for persistent collection delete with composite key --- .../Models/Navigation/NavPointOfInterest.php | 23 +++++++++++++++ .../Tests/Models/Navigation/NavUser.php | 28 +++++++++++++++++++ .../Functional/CompositePrimaryKeyTest.php | 23 +++++++++++++++ .../Doctrine/Tests/OrmFunctionalTestCase.php | 1 + 4 files changed, 75 insertions(+) create mode 100644 tests/Doctrine/Tests/Models/Navigation/NavUser.php diff --git a/tests/Doctrine/Tests/Models/Navigation/NavPointOfInterest.php b/tests/Doctrine/Tests/Models/Navigation/NavPointOfInterest.php index 662a57a09..33d0f70bd 100644 --- a/tests/Doctrine/Tests/Models/Navigation/NavPointOfInterest.php +++ b/tests/Doctrine/Tests/Models/Navigation/NavPointOfInterest.php @@ -30,12 +30,25 @@ class NavPointOfInterest */ private $country; + /** + * @ManyToMany(targetEntity="NavUser", cascade={"persist"}) + * @JoinTable(name="navigation_pois_visitors", + * inverseJoinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}, + * joinColumns={ + * @JoinColumn(name="poi_long", referencedColumnName="nav_long"), + * @JoinColumn(name="poi_lat", referencedColumnName="nav_lat") + * } + * ) + */ + private $visitors; + public function __construct($lat, $long, $name, $country) { $this->lat = $lat; $this->long = $long; $this->name = $name; $this->country = $country; + $this->visitors = new \Doctrine\Common\Collections\ArrayCollection; } public function getLong() { @@ -53,4 +66,14 @@ class NavPointOfInterest public function getCountry() { return $this->country; } + + public function addVisitor(NavUser $user) + { + $this->visitors[] = $user; + } + + public function getVisitors() + { + return $this->visitors; + } } diff --git a/tests/Doctrine/Tests/Models/Navigation/NavUser.php b/tests/Doctrine/Tests/Models/Navigation/NavUser.php new file mode 100644 index 000000000..42117e46b --- /dev/null +++ b/tests/Doctrine/Tests/Models/Navigation/NavUser.php @@ -0,0 +1,28 @@ +name = $name; + } +} + diff --git a/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php b/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php index 4d321ad04..1af930a0c 100644 --- a/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/CompositePrimaryKeyTest.php @@ -5,6 +5,7 @@ use Doctrine\Tests\Models\Navigation\NavCountry; use Doctrine\Tests\Models\Navigation\NavPointOfInterest; use Doctrine\Tests\Models\Navigation\NavTour; use Doctrine\Tests\Models\Navigation\NavPhotos; +use Doctrine\Tests\Models\Navigation\NavUser; require_once __DIR__ . '/../../TestInit.php'; @@ -118,4 +119,26 @@ class CompositePrimaryKeyTest extends \Doctrine\Tests\OrmFunctionalTestCase $this->setExpectedException('Doctrine\ORM\ORMException', 'The identifier long is missing for a query of Doctrine\Tests\Models\Navigation\NavPointOfInterest'); $poi = $this->_em->find('Doctrine\Tests\Models\Navigation\NavPointOfInterest', array('key1' => 100)); } + + /** + * @group DDC-1939 + */ + public function testDeleteCompositePersistentCollection() + { + $this->putGermanysBrandenburderTor(); + + $poi = $this->_em->find('Doctrine\Tests\Models\Navigation\NavPointOfInterest', array('lat' => 100, 'long' => 200)); + $poi->addVisitor(new NavUser("test1")); + $poi->addVisitor(new NavUser("test2")); + + $this->_em->flush(); + + $poi->getVisitors()->clear(); + + $this->_em->flush(); + $this->_em->clear(); + + $poi = $this->_em->find('Doctrine\Tests\Models\Navigation\NavPointOfInterest', array('lat' => 100, 'long' => 200)); + $this->assertEquals(0, count($poi->getVisitors())); + } } diff --git a/tests/Doctrine/Tests/OrmFunctionalTestCase.php b/tests/Doctrine/Tests/OrmFunctionalTestCase.php index 0e9343671..4b72a9a27 100644 --- a/tests/Doctrine/Tests/OrmFunctionalTestCase.php +++ b/tests/Doctrine/Tests/OrmFunctionalTestCase.php @@ -88,6 +88,7 @@ abstract class OrmFunctionalTestCase extends OrmTestCase 'Doctrine\Tests\Models\Routing\RoutingRouteBooking', ), 'navigation' => array( + 'Doctrine\Tests\Models\Navigation\NavUser', 'Doctrine\Tests\Models\Navigation\NavCountry', 'Doctrine\Tests\Models\Navigation\NavPhotos', 'Doctrine\Tests\Models\Navigation\NavTour',