From 15a43029024f1f6269df8695ee85c6984fdc1c2f Mon Sep 17 00:00:00 2001 From: Kevin Bond Date: Mon, 15 Jan 2018 14:01:56 -0500 Subject: [PATCH] Inheritance middle-layer doesn't get hydrated with HYDRATE_OBJECT --- .../ORM/Functional/Ticket/GH6937Test.php | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/GH6937Test.php diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/GH6937Test.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH6937Test.php new file mode 100644 index 000000000..756111b98 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/GH6937Test.php @@ -0,0 +1,119 @@ +setUpEntitySchema([GH6937Person::class, GH6937Employee::class, GH6937Manager::class]); + } + + public function testPhoneNumberIsPopulatedWithFind() : void + { + $manager = new GH6937Manager(); + $manager->name = 'Kevin'; + $manager->phoneNumber = '555-5555'; + $manager->department = 'Accounting'; + + $this->_em->persist($manager); + $this->_em->flush(); + $this->_em->clear(); + + $persistedManager = $this->_em->find(GH6937Person::class, $manager->id); + + self::assertSame('Kevin', $persistedManager->name); + self::assertSame('555-5555', $persistedManager->phoneNumber); + self::assertSame('Accounting', $persistedManager->department); + } + + public function testPhoneNumberIsPopulatedWithQueryBuilderUsingSimpleObjectHydrator() : void + { + $manager = new GH6937Manager(); + $manager->name = 'Kevin'; + $manager->phoneNumber = '555-5555'; + $manager->department = 'Accounting'; + + $this->_em->persist($manager); + $this->_em->flush(); + $this->_em->clear(); + + $persistedManager = $this->_em->getRepository(GH6937Person::class) + ->createQueryBuilder('e') + ->where('e.id = :id') + ->setParameter('id', $manager->id) + ->getQuery() + ->getOneOrNullResult(AbstractQuery::HYDRATE_SIMPLEOBJECT); + + self::assertSame('Kevin', $persistedManager->name); + self::assertSame('555-5555', $persistedManager->phoneNumber); + self::assertSame('Accounting', $persistedManager->department); + } + + public function testPhoneNumberIsPopulatedWithQueryBuilder() : void + { + $manager = new GH6937Manager(); + $manager->name = 'Kevin'; + $manager->phoneNumber = '555-5555'; + $manager->department = 'Accounting'; + + $this->_em->persist($manager); + $this->_em->flush(); + $this->_em->clear(); + + $persistedManager = $this->_em->getRepository(GH6937Person::class) + ->createQueryBuilder('e') + ->where('e.id = :id') + ->setParameter('id', $manager->id) + ->getQuery() + ->getOneOrNullResult(); + + self::assertSame('Kevin', $persistedManager->name); + self::assertSame('555-5555', $persistedManager->phoneNumber); + self::assertSame('Accounting', $persistedManager->department); + } +} + +/** + * @Entity + * @InheritanceType("JOINED") + * @DiscriminatorColumn(name="discr", type="string") + * @DiscriminatorMap({"employee"=GH6937Employee::class, "manager"=GH6937Manager::class}) + */ +abstract class GH6937Person +{ + /** @Id @Column(type="integer") @GeneratedValue */ + public $id; + + /** @Column(type="string") */ + public $name; +} + +/** + * @Entity + */ +abstract class GH6937Employee extends GH6937Person +{ + /** @Column(type="string") */ + public $phoneNumber; +} + +/** + * @Entity + */ +class GH6937Manager extends GH6937Employee +{ + /** @Column(type="string") */ + public $department; +}